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?
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?
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
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
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 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.