Frage Wie entfernen Sie leere / leere Zeilen in einer Datei in Unix?


Wie entferne ich leere / leere (einschließlich Leerzeichen) Zeilen in einer Datei in Unix / Linux über die Befehlszeile?

Inhalt der Datei.txt

Line:Text
1:<blank>
2:AAA
3:<blank>
4:BBB
5:<blank>
6:<space><space><space>CCC
7:<space><space>
8:DDD

Ausgabe gewünscht

1:AAA
2:BBB
3:<space><space><space>CCC
4:DDD

34
2018-03-28 22:14


Ursprung


Für awk, siehe: Entfernen Sie leere Zeilen in awk, oder mit grepim Allgemeinen, siehe: Wie entferne ich Leerzeilen aus einer Datei in der Shell? - kenorb
dieselbe Frage und dieselbe Antwort, die hier gegeben wurde, aber mit viel mehr Stimmen - Trevor Boyd Smith


Antworten:


Diese Sed Linie sollte den Trick machen:

sed -i '/^$/d' file.txt

Das -i bedeutet, dass die Datei direkt bearbeitet wird.


62
2018-03-28 22:19



Es muss tatsächlich "/ ^ * $ / d" sein, um Zeilen zu entfernen, die nur Leerzeichen enthalten. - Sean Reifschneider
@SeanReifschneider Diese Anforderung war nicht in der Frage, als diese Antwort geschrieben wurde? - kasperd
@SeanReifschneider Wäre "/ ^ \ s * $ / d" nicht besser, da es Tabs enthalten würde? Obwohl es im ursprünglichen Beitrag nicht erwähnt wird, scheint es eine stärkere Option für mich. - mrswadge
Hinzufügen der \s* ist die gleiche Lösung, die durch Stapelüberlauffrage gegeben ist - Trevor Boyd Smith


sed '/^$/d' file.txt

d ist der Befehl sed, um eine Zeile zu löschen. ^$ ist ein regulärer Ausdruck, der nur einer Leerzeile entspricht, einem Zeilenanfang gefolgt von einem Zeilenende.


21
2018-03-28 22:18



+1 für die Erklärung - Alex Raj Kaliamoorthy


grep

Einfache Lösung durch Verwendung von grep Befehl:

grep . file

13
2018-05-05 16:12



grep . scheint die einfachste Lösung zu sein. - Leo


Sie können die Option -v mit grep verwenden, um die entsprechenden Leerzeilen zu entfernen.

So was

grep -Ev "^$" file.txt

11
2018-03-28 22:20



Ich glaube nicht, dass du das brauchst -Ezumindest nicht mit GNU grep, aber ansonsten freue ich mich riesig das mit grep gemacht zu sehen! Es ist, was ich für sed vorziehe, jedes Mal; Inline-Filter scheinen mir besser zu sein als Inline-Editoren. - MadHatter


Um leere Zeilen zu entfernen, können Sie neue Zeilenwiederholungen mit drücken tr:

cat file.txt | tr -s '\n' '\n'

6
2017-07-26 10:35





Hier ist ein awk Lösung:

awk NF file

Mit Awk, NF nur auf nicht leere Zeilen gesetzt. Wenn diese Bedingung übereinstimmt, wird mit der Standardaktion Awk die gesamte Zeile gedruckt.


2
2018-06-08 16:48





Ex / Vim

Hier ist die Methode mit ex Editor (Teil von Vim):

ex -s +'v/\S/d' -cwq test.txt

Für mehrere Dateien (direkt bearbeiten):

ex -s +'bufdo!v/\S/d' -cxa *.txt

Beachten Sie das :bufdo Befehl ist nicht POSIX.

Ohne die Datei zu ändern (einfach auf die Standardausgabe drucken):

cat test.txt | ex -s +'v/\S/d' +%p +q! /dev/stdin

0
2018-04-12 21:24