Ich möchte alle leeren Zeilen aus einer Datei entfernen. Auch wenn die Zeile Leerzeichen oder Tabulatoren enthält, sollte sie ebenfalls entfernt werden.
Ich möchte alle leeren Zeilen aus einer Datei entfernen. Auch wenn die Zeile Leerzeichen oder Tabulatoren enthält, sollte sie ebenfalls entfernt werden.
Antworten:
Nur grep
für Nicht-Leerzeichen:
grep '[^[:blank:]]' < file.in > file.out
[:blank:]
Innerhalb von Zeichenbereichen ( [...]
) wird dies als POSIX-Zeichenklasse bezeichnet. Es gibt ein paar wie [:alpha:]
, [:digit:]
... [:blank:]
übereinstimmt horizontalen weißen Raum (in der POSIX locale, das sind Raum und Reiter, sondern auch in anderen Gegenden könnten es mehr sein, wie alle Unicode horizontalen Abstand Zeichen in UTF - 8 Positionen ) , während [[:space:]]
Streichhölzer horizontal und vertikal wissen Leerzeichen (wie [:blank:]
Pluszeichen wie vertikaler Tabulator, Formularvorschub ...).
grep '[:blank:]'
Würden die Zeilen zurück , die alle Zeichen enthalten, :
, b
, l
, a
, n
oder k
. Zeichenklassen werden nur innerhalb [...]
und ^
innerhalb [...]
des Satzes erkannt . Bedeutet [^[:blank:]]
also jedes Zeichen außer den leeren.
[^[:blank:]]$
würde nur mit Zeilen übereinstimmen, die mit einem Nicht-Leerzeichen enden. Wir wollen Zeilen, die überall
grep -E '\S'
das nicht funktioniert?
Wie wäre es mit:
sed -e 's/^[[:blank:]]*$//' source_file > newfile
oder
sed -e '/^[[:blank:]]*$/d' source_file > newfile
dh
Ersetzen Sie für jede Zeile:
^
")[[:blank:]]
") null oder mehrmals (" *
")$
")Weitere Informationen zu :: blank :: und anderen Sonderzeichen finden Sie unter http://www.zytrax.com/tech/web/regex.htm#special
[[:space:]]
enthält Registerkarten. Wenn dies nicht der Fall wäre, würde Ihre Regex fehlschlagen, wenn einem Tabulator ein Leerzeichen folgt.
wctype(3)
und isalpha(3)
beschreiben, welche Zeichenklassen übereinstimmen.
Sie können den sed
Befehl zum Entfernen von Leerzeilen verwenden:
sed '/^$/d' in > out
Dieser Befehl löscht alle Leerzeilen aus der Datei "in"
Sieht so aus, als hätte ich einen gefunden, der nicht so schnell, aber lustig ist:
| xargs -L1
Versuchen ex -Wege:
ex -s +'v/\S/d' -cwq test.txt
Für mehrere Dateien (direkt bearbeiten):
ex -s +'bufdo!v/\S/d' -cxa *.txt
Hinweis: Der :bufdo
Befehl ist nicht POSIX .
Ohne die Datei zu ändern (einfach auf der Standardausgabe drucken):
cat test.txt | ex -s +'v/\S/d' +%p +q! /dev/stdin
Verwenden Sie den folgenden Befehl:
grep '\S' FILE
Dadurch werden alle Zeilen einschließlich Leerzeichen oder Tabulatoren entfernt.
Andernfalls verwenden Sie zum Entfernen von Zeilen ohne Leerzeichen / Tabulatoren Folgendes:
grep . FILE
Beispielsweise:
$ 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:
sed
: Leerzeilen mit sed löschenawk
: Leerzeilen mit awk entfernen
$
for end of line geben?