Jens Kubieziel schrieb:
On Sun, May 02, 2004 at 01:01:54PM +0200, Bjoern Schmidt wrote:Roland M. Kruggel schrieb:ich habe eine Textdatei an deren Ende eine undefinierte Anzahl von Leerzeilen ist. Ich möchte diese Leerzeilen alle löschen.Lustig dieser Thread ;) Versuchs mal damit: sed ':a;/^\n*$/{$d;N;ba;}'| | | | | | | | | |_ springe zum Label a | | | |_ nächste Zeile an den Speicher hängen | | |_ letzte Zeile löschen | |_ Zeile, die am Beginn einen Zeilenumbruch enthält, finden |_ Label a anlegen Wenn ich das richtig verstehe, werden die letzten leeren Zeilen auf eine zusammen gefasst (Also der Form: "\n\n\n") und diese Zeile wird gelöscht.
Genau Richtig. Der Alg. liest eine Zeile in den Pattern Space. Ist diese Zeile nicht leer '/^\n*$' ( steht für leer ), wird der Inhalt vom PS ausgegeben und die nächste Zeile bearbeitet. Ist die Zeile aber leer wird sie gelöscht '$d', falls es die letzte Zeile der Datei ist. Ist es nicht die letzte Zeile der Datei, wird die nächste Zeile in dem PS an die zuvor gelesene Zeile angehängt 'N' und ein branch nach a 'ba;' bzw. 'b a;' ausgeführt. Wenn jetzt eine nicht leere Zeile gelesen wird, so wird der Inhalt des PS ausgegeben und sed fährt wie oben gesagt mit der nächsten Zeile fort. -- Mit freundlichen Gruessen Bjoern Schmidt