it-swarm.com.de

Leere Zeilen mit grep entfernen

Ich habe grep -v '^$' in Linux ausprobiert und das hat nicht funktioniert. Diese Datei stammt aus einem Windows-Dateisystem.

119
node ninja

Versuche Folgendes:

grep -v -e '^$' foo.txt

Die -e-Option ermöglicht das Vergleichen von Regex-Mustern.

Die einfachen Anführungszeichen um ^$ machen es für Cshell möglich. Andere Shells werden mit einfachen oder doppelten Anführungszeichen zufrieden sein.

UPDATE: Dies funktioniert für mich bei einer Datei mit leeren Zeilen oder "allen Leerzeichen" (z. B. Windows-Zeilen mit Zeilenenden mit "\ r\n" -Stil), wohingegen Dateien mit Leerzeilen und Zeilenende im Unix-Stil nur in diesem Fall entfernt werden:

grep -v -e '^[[:space:]]*$' foo.txt
236
ars

Halte es einfach.

grep . filename.txt
39
Frej Connolly
$ dos2unix file 
$ grep -v "^$" file

Oder einfach nur Ahnung

awk 'NF' file

Wenn Sie nicht über dos2unix verfügen, können Sie Werkzeuge wie tr verwenden

tr -d '\r' < "$file" > t ; mv t "$file"
24
ghostdog74
grep -v "^[[:space:]]*$"

The -v makes it print lines that do not completely match

===Each part explained===
^             match start of line
[[:space:]]   match whitespace- spaces, tabs, carriage returns, etc.
*             previous match (whitespace) may exist from 0 to infinite times
$             match end of line

Code ausführen

$ echo "
> hello
>       
> ok" |
> grep -v "^[[:space:]]*$"
hello
ok

Um mehr darüber zu erfahren, wie und warum dies funktioniert, empfehle ich, die regulären Ausdrücke zu lesen. http://www.regular-expressions.info/tutorial.html

12
Sepero

Sie können mit diesem Beispiel eine leere Zeile entfernen: 

grep . filename.txt
3
tts

Wenn Sie mehrere Leerzeilen hintereinander haben und nur eine Leerzeile pro Sequenz wünschen, versuchen Sie es

grep -v "unwantedThing" foo.txt | cat -s

cat -s unterdrückt wiederholte leere Ausgabezeilen.

Ihre Ausgabe würde von gehen

match1



match2

zu

match1

match2

Die drei leeren Zeilen in der ursprünglichen Ausgabe werden komprimiert oder zu einer leeren Zeile "zusammengedrückt".

2
Senol Erdogan

Ich bevorzuge egrep, obwohl in meinem Test mit einer echten Datei mit Leerzeile Ihr Ansatz gut funktionierte (obwohl in meinem Test keine Anführungszeichen). Das hat auch funktioniert:

egrep -v "^(\r?\n)?$" filename.txt
2
chryss

Gleiche Antworten wie oben

grep -v -e '^$' foo.txt

Hier bedeutet grep -e erweiterte Version von grep. '^ $' bedeutet, dass zwischen ^ (Zeilenanfang) und $ (Zeilenende) kein Zeichen steht. '^' und '$' sind Regex-Zeichen. 

Der Befehl grep -v gibt also alle Zeilen aus, die diesem Muster nicht entsprechen (keine Zeichen zwischen ^ und $). 

Auf diese Weise werden leere Leerzeilen eliminiert

2
FatherMathew

Bemüht, aber das scheint zu funktionieren (vorausgesetzt, \r ist hier beißt)

printf "\r" | egrep -xv "[[:space:]]*"
1
mvds

hier können Sie die weißen Linien und Linien, die mit dem # -Zeichen beginnen, entfernen. Ich denke, das ist sehr nützlich, um Konfigurationsdateien zu lesen.

[[email protected] ~]# cat /etc/sudoers | egrep -v '^(#|$)'
Defaults    requiretty
Defaults   !visiblepw
Defaults    always_set_home
Defaults    env_reset
Defaults    env_keep =  "COLORS DISPLAY HOSTNAME HISTSIZE INPUTRC KDEDIR
LS_COLORS"
root    ALL=(ALL)       ALL
%wheel  ALL=(ALL)       ALL
stack ALL=(ALL) NOPASSWD: ALL
0
lauc.exon.nod

Perl verwenden:

Perl -ne 'print if /\S/'

\S bedeutet, dass die Zeichen nicht leer sind.

0
Majid Azimi

grep pattern dateiname.txt | uniq

0
baitisj

egrep -v "^\s\s +"

egrep tun bereits Regex, und\s ist Leerzeichen. 

Das + kopiert das aktuelle Muster.

Das ^ ist für den Anfang

0
Jonni2016aa
awk 'NF' file-with-blank-lines > file-with-no-blank-lines
0
Tim