it-swarm.com.de

Wie entferne ich leere Zeilen aus einer Datei (einschließlich Tabulatoren und Leerzeichen)?

Ich möchte alle leeren Zeilen aus einer Datei entfernen. Auch wenn die Zeile Leerzeichen oder Tabulatoren enthält, sollte sie entfernt werden.

Nur grep für Nicht-Leerzeichen:

grep '[^[:blank:]]' < file.in > file.out

[:blank:] Wird innerhalb von Zeichenbereichen ([...]) Als POSIX-Zeichenklasse bezeichnet. Es gibt einige wie [:alpha:], [:digit:] ... [:blank:], Die dem horizontalen Leerraum entsprechen (im POSIX-Gebietsschema ist dies Leerzeichen und Tabulator, in anderen Gebietsschemas könnte es jedoch mehr geben , wie alle Unicode-Zeichen mit horizontalem Abstand in UTF8-Gebietsschemas), während [[:space:]] mit horizontalen und vertikalen Leerzeichen übereinstimmt (wie [:blank:] plus Dinge wie vertikale Registerkarte, Formular-Feed ...).

grep '[:blank:]'

Würde die Zeilen zurückgeben, die eines der Zeichen :, b, l, a, n oder k. Zeichenklassen werden nur innerhalb von [...] Erkannt, und ^ Innerhalb von [...] Negiert die Menge. [^[:blank:]] Bedeutet also jedes Zeichen außer den leeren.

26

Hier ist eine awk Lösung:

$ awk NF file

Mit awk wird NF nur auf nicht leere Zeilen gesetzt. Wenn diese Bedingung übereinstimmt, druckt die Standardaktion awk, die print ist, die gesamte Zeile.

22
cuonglm

Wie wäre es mit:

sed -e 's/^[[:blank:]]*$//' source_file > newfile

oder

sed -e '/^[[:blank:]]*$/d' source_file > newfile

d.h.

Ersetzen Sie für jede Zeile:

  • wenn es startet ("^ ")
  • mit Leerzeichen oder Tabulatoren ("[[:blank:]] ") null oder mehrmals (" * ")
  • und dann ist das Ende der Zeile ("$ ")

Weitere Informationen zu :: blank :: und anderen Sonderzeichen unter http://www.zytrax.com/tech/web/regex.htm#special

7
Michael Durrant

Mit dem Befehl sed können Sie Leerzeilen entfernen:

sed '/^$/d' in > out

Dieser Befehl löscht alle Leerzeilen aus der Datei "in".

4
Raghavendra

Sieht so aus, als hätte ich einen gefunden, der nicht so schnell, aber endlich lustig ist:

| xargs -L1

3
poige

Versuchen Sie ex - Weg:

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
kenorb

Verwenden Sie den folgenden Befehl:

grep '\S' FILE

dadurch werden alle Zeilen einschließlich Leerzeichen oder Tabulatoren entfernt.

Andernfalls verwenden Sie das Entfernen ohne Zeilen mit Leerzeichen/Tabulatoren:

grep . FILE

Zum Beispiel:

$  printf "line1\n\nline2\n \nline3\n" > FILE
$  cat -v FILE
line1

line2

line3
$  grep '\S' FILE
line1
line2
line3
$  grep . FILE
line1
line2

line3

Siehe auch:

0
kenorb