2010-12-23 7 views
21

Ich weiß, es gibt eine ähnliche Frage in SO How can I replace mutliple empty lines with a single empty line in bash?. Aber meine Frage ist, kann dies implementiert werden, indem Sie einfach den Befehl sed?Kann ich mit dem Befehl sed mehrere leere Zeilen durch eine leere Zeile ersetzen?

Dank

+0

versuchen, alle Antworten beim nächsten Mal zu lesen: http://stackoverflow.com/questions/922449/how-can-i-replace-mutliple-empty-lines-with -a-single-leer-line-in-bash/922499 # 922499 – OrangeDog

+0

Eigentlich habe ich alle Antworten gelesen. Die Antwort "Clue Less" und "Berk Güder" kann nur alle leeren Zeilen entfernen, nicht das, was ich brauchte. –

+0

* -i * wechseln? * sed -i '/^$/d' text.txt * sollte funktionieren und soweit ich es überprüft habe, ist _is_ in der Antwortliste (neben * -i * Option). –

Antwort

36

gibt diesen einen Versuch:

sed '/^$/N;/^\n$/D' inputfile 
+0

+1 Wie auch immer, dein Beispiel ist besser, da es führende und schließende Leerzeilen korrekt verarbeitet, während meins sie einfach abzieht. –

+0

Ein passender Zeilenumbruch am Anfang der Zeile ist nicht erforderlich, es genügt, einen neuen Zeilenumbruch zu verwenden. –

1

Sie können dies tun, indem leere Zeilen zuerst zu entfernen und Zeilenabstand mit G anhängen Befehl:

sed '/^$/d;G' text.txt 

Edit2: der obige Befehl Leerzeilen zwischen jedem hinzufügen wird Absatz, wenn dies nicht gewünscht ist, könnten Sie tun:

sed -n '1{/^$/p};{/./,/^$/p}' 

Oder, wenn Sie nichts dagegen haben, dass alle führenden Leerzeilen gestrippt wird, kann es so geschrieben werden:

sed -n '/./,/^$/p' 

da der erste Ausdruck wertet nur die erste Zeile, und druckt sie, wenn es leer ist.

Hier: -n Option unterdrückt Musterraum Auto-Drucken, /./,/^$/ definiert den Bereich zwischen zumindest einem Zeichen und keine Zeichen (dh Leerraum zwischen newlines) und p sagt, um diesen Bereich zu drucken.

Verwandte Themen