Linux / Befehl sed: Textströme suchen und ersetzen
sed ist ein Stream-Editor, der Eingaben zeilenweise liest, Bearbeitungsregeln anwendet und die Ergebnisse ausgibt. Er eignet sich für wiederholte Texttransformationen, wie z.B. Ersetzungen, das Auswählen bestimmter Zeilen und das Löschen.
Standardmäßig verändert er die Originaldatei nicht und gibt das transformierte Ergebnis an die Standardausgabe aus. Die Form des Ersetzungsbefehls ist s/pattern_to_find/replacement_content/flags, und das Hinzufügen von g ersetzt alle Treffer in einer Zeile.
Grundlegende Syntax
sed [options] 'editing command' [file...]
Installierte Implementierungen und Optionen können je nach Distribution variieren. Überprüfen Sie die Beschreibung für Ihr aktuelles System mit man sed.
Vergleichen Sie die ursprüngliche Eingabe, Ausgabe, Backups und Wiederherstellung
Führen Sie den gesamten Block aus: Er bereitet jede Eingabe in einem neuen temporären Verzeichnis innerhalb eines Subshells vor und gibt dieses Verzeichnis am Ende aus. Er überschreibt keine Dateien im aktuellen Arbeitsverzeichnis. Prüfen Sie die Ergebnisse und entfernen Sie die Labordaten nur, wenn sie nicht mehr benötigt werden.
( set -eu labdir=$(mktemp -d) cd "$labdir" printf 'red car\nred red\n' > config.txt sed 's/red/green/' config.txt > first.txt sed 's/red/green/g' config.txt > all.txt cat config.txt first.txt all.txt cp config.txt editable.txt sed -i.bak 's/red/green/g' editable.txt diff -u editable.txt.bak editable.txt || test "$?" -eq 1 cmp config.txt editable.txt.bak cp editable.txt.bak editable.txt cmp config.txt editable.txt printf 'Lab files: %s\n' "$labdir" )
Die Originaldatei enthält weiterhin red car und red red. Beim Ersetzen des ersten Treffers entstehen green car und green red; beim globalen Ersetzen entstehen green car und green green. GNU sed -i.bak ändert editable.txt und behält dessen vorherigen Inhalt in .bak. diff Status 1 bedeutet, dass Unterschiede gefunden wurden, während erfolgreiche cmp-Prüfungen zeigen, dass das Backup und der wiederhergestellte Inhalt mit dem Original übereinstimmen. Überprüfen Sie die -i-Syntax anderer Implementierungen und unterscheiden Sie zwischen regulären Ausdrücken wie .* und Literalzeichenketten.
Hauptoptionen und Format
| Optionen/Format | Beschreibung |
|---|---|
-n |
Schalten Sie die automatische Ausgabe standardmäßig aus. |
-e script |
Geben Sie mehrere Bearbeitungsbefehle an. |
-E |
Verwenden Sie erweiterte reguläre Ausdrücke. |
-i[suffix] |
Bearbeiten Sie Dateien an Ort und Stelle und erstellen Sie optional eine Sicherung in der GNU-Implementierung. |
Vorsichtsmaßnahmen bei der Verwendung
`sed -i verändert tatsächlich die Datei, daher sollten Sie bei wichtigen Dateien einen Sicherungssuffix verwenden und die Ergebnisse überprüfen. Die -i`-Syntax unterscheidet sich zwischen GNU und BSD. Außerdem müssen Sie die Shell-Quotierung und Sonderzeichen in regulären Ausdrücken berücksichtigen.
Häufig gestellte Fragen
Verändert das reine Ausführen von sed die Originaldatei?
Nein. Standardmäßig gibt es das geänderte Ergebnis aus. Sie müssen `-i` verwenden oder das Ergebnis in einer separaten Datei speichern, um die Datei zu ändern.
Offizielle Dokumentation
Die genaue Funktionsweise der Optionen und die Unterschiede zwischen den Implementierungen können Sie in der offiziellen sed-Dokumentation nachlesen.




