• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

[gelöst] nach x zeichen ein neues zeichen einfügen

Hallo zusammen,

ich habe eine Datei mit ca. 5000 Zeilen. Jede Zeile enthält einen String von ca. 50 Zeichen.
Jetzt muss ich nach jeder zweiten Ziffer ein "\x" einfügen.

Wie mache ich das am besten?

Vielen Dank im Voraus
 
Gilt das "\n" am Zeilenende auch als Zeichen?

Ist "\x" ein Sonderzeichen oder "\" + "x"?

"nach jeder zweiten Ziffer": Sind das Ziffern in dem String oder ist nach jedem zweiten Zeichen gemeint?

Gruß
 
Code:
cat file.txt | perl -e 'while(<>){for($i=0;$i<length($_);$i++){print substr($_,$i,1);print "\\x";}}'
:wink:
 
A

Anonymous

Gast
abgdf schrieb:
Code:
cat file.txt | perl -e 'while(<>){for($i=0;$i<length($_);$i++){print substr($_,$i,1);print "\\x";}}'
ich glaube das sind ein paar zu viele \x ;)

Da muss er uns erst mal mit einem Beispiel genau zeigen was er haben will, zB ist vollkommen unklar was aus folgendem werden sollte.
Code:
 # cat test
3813.FFFF.0000=7235938
3813.FFFF.0000.Size=4
Kann so gemeint sein
Code:
 # sed 's/\([0-9][0-9]\)/\1\\x/g' test
38\x13\x.FFFF.00\x00\x=72\x35\x93\x8
38\x13\x.FFFF.00\x00\x.Size=4
aber auch so
Code:
# sed 's/\([0-9][0-9]\)/\1\\x/' test
38\x13.FFFF.0000=7235938
38\x13.FFFF.0000.Size=4
oder es kann auch gemeint sein das die Ziffern gar nicht unbedingt immer zusammenstehen müssen und notfalls auch die zweite Ziffer in einer anderen Zeile stehen darf wie die erste Ziffer oder oder oder.
oder doch so ;)
Code:
 # cat test | perl -e 'while(<>){for($i=0;$i<length($_);$i++){print substr($_,$i,1);print "\\x";}}'
3\x8\x1\x3\x.\xF\xF\xF\xF\x.\x0\x0\x0\x0\x=\x7\x2\x3\x5\x9\x3\x8\x
\x3\x8\x1\x3\x.\xF\xF\xF\xF\x.\x0\x0\x0\x0\x.\xS\xi\xz\xe\x=\x4\x

robi
 
Guten Abend zusammen,

vielen vielen Dank für die Antworten.
Damit komme ich fast zum Ziel.

Hier jetzt mal etwas genauer wie es ausschauen soll...

So sieht die datei aus:
Code:
 cat test2.txt 
4445410815012C47EE7C00196AAD23EB0011630000000001000300014b5c3b132902a0598490110f0001
4445410815012C47EE7C00196AAD23EB001164000000000100030001686957132902a0598440110f0001

und so sollte sie aussehen:
\x44\x45\x41\x08\x15\x...\x00\x01
\x44\x45\x41\x08\x15\x...\x00\x01

Leider komme ich mit Euren Vorschlägen noch nicht ganz dahin. Habt ihr noch eine Idee?

Code:
sed 's/\([0-9][0-9]\)/\1\\x/g' test2.txt 
44\x45\x41\x08\x15\x01\x2C47\xEE7C00\x19\x6AAD23\xEB00\x11\x63\x00\x00\x00\x00\x01\x00\x03\x00\x01\x4b5c3b13\x29\x02\xa05\x98\x49\x01\x10\xf00\x01\x
44\x45\x41\x08\x15\x01\x2C47\xEE7C00\x19\x6AAD23\xEB00\x11\x64\x00\x00\x00\x00\x01\x00\x03\x00\x01\x68\x69\x57\x13\x29\x02\xa05\x98\x44\x01\x10\xf00\x01\x

Code:
 cat test2.txt | perl -e 'while(<>){for($i=0;$i<length($_);$i++){print substr($_,$i,2);print "\\x";}}'
44\x44\x45\x54\x41\x10\x08\x81\x15\x50\x01\x12\x2C\xC4\x47\x7E\xEE\xE7\x7C\xC0\x00\x01\x19\x96\x6A\xAA\xAD\xD2\x23\x3E\xEB\xB0\x00\x01\x11\x16\x63\x30\x00\x00\x00\x00\x00\x00\x00\x00\x01\x10\x00\x00\x03\x30\x00\x00\x01\x14\x4b\xb5\x5c\xc3\x3b\xb1\x13\x32\x29\x90\x02\x2a\xa0\x05\x59\x98\x84\x49\x90\x01\x11\x10\x0f\xf0\x00\x00\x01\x1
\x
\x44\x44\x45\x54\x41\x10\x08\x81\x15\x50\x01\x12\x2C\xC4\x47\x7E\xEE\xE7\x7C\xC0\x00\x01\x19\x96\x6A\xAA\xAD\xD2\x23\x3E\xEB\xB0\x00\x01\x11\x16\x64\x40\x00\x00\x00\x00\x00\x00\x00\x00\x01\x10\x00\x00\x03\x30\x00\x00\x01\x16\x68\x86\x69\x95\x57\x71\x13\x32\x29\x90\x02\x2a\xa0\x05\x59\x98\x84\x44\x40\x01\x11\x10\x0f\xf0\x00\x00\x01\x1
\x
\x

Danke schon mal.
 
A

Anonymous

Gast
molombo schrieb:
und so sollte sie aussehen:
\x44\x45\x41\x08\x15\x...\x00\x01
\x44\x45\x41\x08\x15\x...\x00\x01
Wenn da wirklich keine Textpassagen und keinen Leerzeichen und sonstige Löcher dazwischen rumstehen sollte
Code:
sed 's/\(.\{2\}\)/\\x\1/g' DATEI
ausreichen
oder noch kürzer
Code:
sed 's/\(..\)/\\x\1/g'  DATEI

robi
 
jengelh schrieb:
:shock: Na, dann eben so:
Code:
perl -pe '$a="";chomp;for($i=0;$i<length($_);$i+=2){$a.="\\x";$a.=substr($_,$i,2);}$a.="\n";$_=$a;' test2.txt
Aber danke, hatte Perls -p-Switch bisher nie ganz verstanden ...

Gruß
 
Oben