PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Datei neu aufbauen



DieterH
13-01-2011, 20:20
Hallo,

ich möchte eine Datei folgenden Inhalts

abc
def
@@NEWLINE@@
ghi
jkl
mno
@@NEWLINE@@
xyz

mit Hilfe von SED umbauen zu:

abcdef
ghijklmno
xyz

Mit Linux-Bordmitteln wie awk geht das, ich möchte eine Lösung mit SED. Meine Versuche mit den sed-Befehlen H und G und auch p an geeigneter Stelle führen nicht zum gewünschten Ergebnis, da H und G jeweils ein \n einfügen, das ich nicht benötige.

Die Zeichenkette "@@NEWLINE@@" soll einen Zeilenvorschub in der zu erstellenden Datei bewirken, sie selbst soll nicht in der Ausgabedatei enthalten sein.

Gibt es überhaupt eine Lösung mit SED?

Vielen Dank im voraus!

Gruss
Dieter

John W
13-01-2011, 21:33
sed -r ':a N ; :b s#(\n?@@NEWLINE@@\n?)#\1#g ; t c ; s#\n##g ; :c ; t a ; s#(\n*@@NEWLINE@@\n*)##g'
Kleiner Schönheitsfehler: Wenn du mehrere @@NEWLINE@@-Zeilen hast, wird der Zeilenumbruch nach der nächsten Zeile erhalten bleiben, also aus


11111
@@NEWLINE@@
@@NEWLINE@@
2
22
@@NEWLINE@@
3333
wird


11111
2
22
3333

msi
13-01-2011, 22:27
alternativ perl:



perl -pe 'chomp; s/\@\@NEWLINE\@\@/\n/' datei.txt

DieterH
14-01-2011, 09:57
John,
msi,

danke für eure Lösungsvorschläge.

@John:

um aufeinanderfolgende @@NEWLINE@@ zu vermeiden, setze ich jeweils eine Zeile, die nur aus einer gesonderten Zeichenkette (z.B. @@NULLSTRING@@) vor die Zeile mit @@NEWLINE@@ und lösche am Ende alle Vorkommnisse dieser gesonderten Zeichenkette.

Gruss
Dieter