495 Stimmen

Löschen Sie leere Zeilen mit sed

Ich versuche, leere Zeilen mit sed zu löschen:

sed '/^$/d'

aber bisher hatte ich kein Glück damit.

Zum Beispiel habe ich diese Zeilen:

xxxxxx

yyyyyy

zzzzzz

und ich möchte es so haben:

xxxxxx
yyyyyy
zzzzzz

Was sollte der Code dafür sein?

18voto

user319660 Punkte 182

Eine weitere Option ohne sed, awk, perl usw.

strings $file > $output

strings - Druckt die Zeichenfolgen druckbarer Zeichen in Dateien aus.

17voto

ConMan Punkte 1642

Mit Hilfe der akzeptierten Antwort hier und der oben akzeptierten Antwort habe ich verwendet:

$ sed 's/^ *//; s/ *$//; /^$/d; /^\s*$/d' file.txt > output.txt

`s/^ *//`  => links trimmen
`s/ *$//`  => rechts trimmen
`/^$/d`    => leere Zeile entfernen
`/^\s*$/d` => Löschen von Zeilen, die Leerzeichen enthalten können

Dies deckt alle Eventualitäten ab und funktioniert perfekt für meine Bedürfnisse. Anerkennung an die Originalposter @Kent und @kev

7voto

Samuel Kenneth Punkte 89

Der Befehl, den Sie versuchen, ist korrekt, verwenden Sie einfach die -E-Flagge damit.

sed -E '/^$/d'

Die -E-Flagge macht, dass sed erweiterte reguläre Ausdrücke aufnimmt. Weitere Informationen hier

5voto

tank Punkte 63

Sie können sagen:

sed -n '/ / p' Dateiname    #Es gibt ein Leerzeichen zwischen '//'

4voto

Douglas Daseeco Punkte 3112

Sie sehen wahrscheinlich das unerwartete Verhalten, weil Ihre Textdatei auf Windows erstellt wurde, sodass die Zeilenumbruchsequenz \r\n ist. Sie können dos2unix verwenden, um sie in eine UNIX-Textdatei umzuwandeln, bevor Sie sed ausführen, oder verwenden Sie

sed -r "/^\r?$/d"

um leere Zeilen zu entfernen, unabhängig davon, ob der Wagenrücklauf vorhanden ist oder nicht.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X