2017-01-09 4 views
2

Ich habe versucht, den Befehl 'sed' zu verwenden, um die leeren Zeilen zu entfernen.Lösche leere Zeilen aus einer Textdatei über Bash mit Leerzeichen

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

Meine Beispiel-txt-Datei sieht so aus. Die zweite Zeile enthält Leerzeichen. Der Befehl sed entfernt nur die leeren Zeilen, nicht jedoch die Zeilen mit Leerzeichen.

Sample text 

Sample text 

So ist es weg, um dies über bash zu erreichen.

Mein bestimmt heraus gesetzt ist

Sample text 
Sample text 
+0

Was ist Ihre beabsichtigte Ausgabe, ** genau **? Willst du 'testline'? Möchten Sie, dass eine Zeile mit beliebigen Leerzeichen darin gelöscht wird? –

+3

versuche 'sed '/^\ s * $/d'' –

+1

... sollte die Datei nur 'testlineestline' enthalten, keine Leerzeichen * einschließlich * Zeilenumbrüche? (Das ist wirklich * wirklich * einfach, eine Arbeit zu sein, die 'tr' kann). –

Antwort

2

Verwenden Sie Zeichenklasse [:blank:], um Speicherplatz oder Registerkarte anzugeben:

Mit sed:

sed -i '/^[[:blank:]]*$/ d' file.txt 

Mit perl:

perl -ne 'print if !/^[[:blank:]]*$/' file.txt 

Mit awk:

awk '!/^[[:blank:]]*$/' file.txt 

Mit grep:

grep -v '^[[:blank:]]*$' file.txt 

Wenn das Tool die Bearbeitung nicht direkt unterstützt, verwenden Sie eine temporäre Datei, z. für grep:

grep -v '^[[:blank:]]*$' file.txt >file.txt.tmp && mv file.txt{.tmp,} 
2
sed -i '/^ *$/d' file.txt 

oder auch andere Leerzeichen passen wie Tabs, etc:

sed -i '/^[[:space:]]*$/d' file.txt 

das Zeichen * entspricht 0 oder mehr Instanzen von vorhergehenden Zeichen

+0

'\ s' für jede Art von Leerzeichen, nicht nur Leerzeichen. –

+0

Oder '[[:: Leerzeichen:]]' für eine Präferenz. –

+1

'\ s' funktioniert nicht in POSIX' sed'. Dies ist ein Platz, an dem, wenn in der Frage, die bekanntermaßen PCRE-Erweiterungen unterstützt, eine bestimmte Implementierung angegeben ist, würde ich argumentieren, dass die Angabe von etwas anderem als der POSIX-BRE-Syntax * falsch * ist. –

Verwandte Themen