sed
Text, Pipes & Filter
Was ist sed?
sed ist der „stream editor“ – ein Editor, der Text zeilenweise und automatisch bearbeitet, ohne dass du ihn interaktiv öffnest. Damit ersetzt, löschst oder transformierst du Text in Dateien oder direkt in Pipelines. sed ist ideal für wiederkehrende Massenänderungen.
Ersetzen mit s///
Der häufigste Befehl ist die Substitution s/alt/neu/:
$ echo "Hallo Welt" | sed 's/Welt/Linux/' Hallo Linux
Ohne weitere Angabe wird nur das erste Vorkommen pro Zeile ersetzt. Das Flag g (global) ersetzt alle Vorkommen:
$ echo "a-a-a" | sed 's/a/X/' # X-a-a $ echo "a-a-a" | sed 's/a/X/g' # X-X-X
Mit i wird die Groß-/Kleinschreibung ignoriert: s/fehler/OK/gi.
Direkt in Dateien schreiben: -i
Standardmäßig gibt sed das Ergebnis nur aus, die Datei bleibt unverändert. Mit -i (in-place) wird die Datei wirklich geändert:
$ sed -i 's/alt/neu/g' datei.txt # Datei direkt ändern $ sed -i.bak 's/alt/neu/g' datei.txt # mit Sicherungskopie .bak
Tipp: Schreibe -i.bak, dann legt sed automatisch eine Kopie datei.txt.bak an, bevor es ändert.
Anderes Trennzeichen
Enthält das Muster Schrägstriche (z. B. Pfade), kannst du ein anderes Trennzeichen wählen:
$ sed 's#/alt/pfad#/neu/pfad#' datei.txt
Zeilen löschen und auswählen
$ sed '3d' datei.txt # Zeile 3 löschen $ sed '2,5d' datei.txt # Zeilen 2 bis 5 löschen $ sed '/^#/d' config.conf # alle Kommentarzeilen löschen $ sed '/^$/d' datei.txt # leere Zeilen entfernen $ sed -n '10,20p' datei.txt # nur Zeilen 10-20 anzeigen
Mit -n wird die automatische Ausgabe unterdrückt, sodass p (print) gezielt nur gewünschte Zeilen ausgibt.
Was bewirkt das g in s/a/b/g?
Sicherheit & Stolperfallen
sed -i ändert Dateien unwiderruflich – teste den Befehl daher zuerst ohne -i und prüfe die Ausgabe, oder arbeite mit -i.bak. Sonderzeichen in Mustern (., *, [) werden als Regex interpretiert – willst du sie wörtlich, maskiere sie mit \. Für komplexere, spaltenbasierte Verarbeitung ist awk oft besser geeignet.