batch insert character

Fórumok

Hello!

Szeretnek egy kis segitseget kerni a kovetkezo problemaban:

adott jo par text file, amikbe be kene szurni ";"-t adott helyekre. (mindegyik fileban ugyan arra a poziciokra)
Meg lehet ezt oldani sed-el, vagy valahogy mashogy?

Hozzászólások

Pl sima szövegszerkesztő replace funkció?

adj egy [cenzúrázott] mintát [ha lehet minél többet, pastebin-en keresztül, stb], és h. hova kellenek a ";"-ok, és akkor tudnánk segíteni!

utána már csak find-ba kell rakni, és kész

és nem linux haladó, ha csak nem valami speck. regexp-el lehet csak megvalósítani:D

most kezdem, pár perc
ez már megvan:

echo "valami" | sed "s/.\{2\}/&\n/g"

nah


A proba.txt a pastebin-es minta, az első sort töröltem benne:

$ sed "s/.\{14\}/&;/" proba.txt | sed "s/.\{31\}/&;/" |  sed "s/.\{36\}/&;/" |  sed "s/.\{41\}/&;/" |  sed "s/.\{102\}/&;/" |  sed "s/.\{133\}/&;/" |  sed "s/.\{147\}/&;/" |  sed "s/.\{159\}/&;/" | head -10
67178008269050;AM2135000A3074  ;098 ;90  ;Cintura                                                     ;NoFib 100 % LEATHER ;         ;000000000.00 ;0000020.50 ;0001
67178008269051;AM2135000A3074  ;098 ;95  ;Cintura                                                     ;NoFib 100 % LEATHER ;         ;000000000.00 ;0000020.50 ;0001
67178008269052;AM2135000A3074  ;098 ;100 ;Cintura                                                     ;NoFib 100 % LEATHER ;         ;000000000.00 ;0000020.50 ;0002
67178008269053;AM2135000A3074  ;098 ;105 ;Cintura                                                     ;NoFib 100 % LEATHER ;         ;000000000.00 ;0000020.50 ;0001
67186004454050;AM2141000A3007  ;098 ;90  ;Cintura                                                     ;NoFib 100 % LEATHER ;         ;000000000.00 ;0000029.00 ;0001
67186004454051;AM2141000A3007  ;098 ;95  ;Cintura                                                     ;NoFib 100 % LEATHER ;         ;000000000.00 ;0000029.00 ;0002
67186004454052;AM2141000A3007  ;098 ;100 ;Cintura                                                     ;NoFib 100 % LEATHER ;         ;000000000.00 ;0000029.00 ;0002
67186004454053;AM2141000A3007  ;098 ;105 ;Cintura                                                     ;NoFib 100 % LEATHER ;         ;000000000.00 ;0000029.00 ;0001
67186004454153;AM2141000A3007  ;098 ;110 ;Cintura                                                     ;NoFib 100 % LEATHER ;         ;000000000.00 ;0000029.00 ;0001
67198008293048;AW2158000A3072  ;001 ;80  ;Cintura                                                     ;NoFib 100 % LEATHER ;         ;000000000.00 ;0000023.00 ;0001
$ 

vegulis sed-el megoldottam :)

find -name "*.txt" -exec sed -i -f script {} \;

script tartalma:
s/\(.\{14\}\)/&;/;s/\(.\{31\}\)/&;/;s/\(.\{35\}\)/&;/;s/\(.\{41\}\)/&;/;s/\(.\{72\}\)/&;/;s/\(.\{103\}\)/&;/;s/\(.\{147\}\)/&;/;s/\(.\{159\}\)/&;/

valoban mezohosszokkal volt egy kis gond..

azert koszi mindenkinek!

szerintem a legegyszerűbb awk-val szétdarabolni azokon a határpontokon, ahova be kell szúrni és úgy íratni ki a sort, hogy közzé teszed a ;-t.