sed: Zeilenumbrüche entfernen/ersetzen
Hallo zusammen, ich möchte gerne mit sed - Die Zeilenumbrüche aller nichtleeren Zeilen entfernen und durch Tabs ersetzen - Die Zeilenumbrüche aller leeren Zeilen stehen lassen. Warum funktioniert das nicht: sed -e ':;s#\(?*\)\n#\1\t#;N;T' | | | | | +-> bringt mir den Inhalt der nichtleeren | Zeile zurück, und das \t setzt das Tab. | | Dieser Bereich sollte ein oder mehr beliebige Zeichen einfangen => die Zeile ist nicht leer und endet auf newline. Danke+Gruß! -- Andre Tann -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Hallo, Am Mon, 02 Nov 2009, Andre Tann schrieb:
ich möchte gerne mit sed
- Die Zeilenumbrüche aller nichtleeren Zeilen entfernen und durch Tabs ersetzen
- Die Zeilenumbrüche aller leeren Zeilen stehen lassen.
Warum funktioniert das nicht:
sed -e ':;s#\(?*\)\n#\1\t#;N;T' ^ ^^- steht anfangs nicht mit im pattern-space ` das steht hier für ein '?'. Nicht für ein bel. Zeichen. Und auch \(.*\) passt auf die leere Zeile. Du meinst \(.\+\) bei GNU sed, sonst \(..*\)
Ausserdem: T kennt mein aelteres GNU sed nicht und hier ist es auch ueberfluessig, da Label/Sprung eh am Anfang/Ende des Scriptes stehen. Generell ist sed nicht gut dafür geeignet, mehrzeiliges zu bearbeiten. Nimm besser perl, damit kannst du Dateiweise arbeiten. -dnh -- If you're looking for me, I'll be the quivering pile of jelly wobbling pitifully in the corner over there. -- Stuart Lamble, in the SDM -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
David Haller, Montag 02 November 2009:
^ ^^- steht anfangs nicht mit im pattern-space ` das steht hier für ein '?'. Nicht für ein bel. Zeichen. Und auch \(.*\) passt auf die leere Zeile. Du meinst \(.\+\) bei GNU sed, sonst \(..*\)
Ja, ich wollte .+ schreiben, und in der Tat ist .\+ natürlich richtig.
Nimm besser perl, damit kannst du Dateiweise arbeiten.
Seufz... Das hatte ich jetzt schon öfter gehört. Irgendwann muß ich wohl in diesen Apfel beißen... -- Andre Tann -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Hallo, Am Mon, 02 Nov 2009, Andre Tann schrieb:
David Haller, Montag 02 November 2009: [..]
Nimm besser perl, damit kannst du Dateiweise arbeiten.
Seufz... Das hatte ich jetzt schon öfter gehört. Irgendwann muß ich wohl in diesen Apfel beißen...
==== #!/usr/bin/perl -w use strict; { ### slurp file into $_ local $/; $_ = <>; } s/\n\n/\0\t/gm; s/\n/\t/gm; s/\0\t/\n/gm; s/\0/\n/gm; s/\n\t/\n/gm; print "$_\n";' ===== Das macht zumindest das, was du spezifiziert hast, ob auch das, was du willst ... ;) -dnh -- We all know Linux is great... it does infinite loops in 5 seconds. -- Linus Torvalds -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Andre Tann, Montag 02 November 2009:
sed -e ':;s#\(?*\)\n#\1\t#;N;T'
Sorry, hätte natürlich heißen müssen: sed -e ':;s#\(.+\)\n#\1\t#;N;T' Trotzdem funktionierts nicht, und ich wüßt gern, wieso. -- Andre Tann -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Hallo, Am Mon, 02 Nov 2009, Andre Tann schrieb:
Andre Tann, Montag 02 November 2009:
sed -e ':;s#\(?*\)\n#\1\t#;N;T'
Sorry, hätte natürlich heißen müssen:
sed -e ':;s#\(.+\)\n#\1\t#;N;T' ^ + hat keine Sonderbedeutung!
Trotzdem funktionierts nicht, und ich wüßt gern, wieso.
Siehe meine erste Mail. -dnh -- Die Signatur will nicht angezeigt werden. Die gewuenschte Signatur ist zur Zeit nicht verfuegbar. Moeglicherweise ist sie gerade im Urlaub oder hat einfach keine Lust angezeigt zu werden. Oder wollen Sie staendig beobachtet werden? -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
participants (2)
-
Andre Tann
-
David Haller