Der ultimative Leitfaden zum Linux-Befehl sed

Übersicht

In diesem Leitfaden stellen wir den leistungsstarken Stream-Editor sed vor, mit dem Sie Textdateiinhalte in einer Linux-Umgebung schnell und präzise ersetzen und bearbeiten können. Anhand praxisnaher Beispiele lernen Sie alles von der grundlegenden Zeichenkettenersetzung über das Löschen bestimmter Zeilen bis hin zur direkten Bearbeitung von Dateien mit gleichzeitiger Erstellung eines Backups über die Inline-Option (-i).

1. Vorbereitung der Übungsumgebung und grundlegende sed-Zeichenkettenersetzung (s-Befehl)

Führen Sie den Befehl mkdir -p ~/sed_practice && cd ~/sed_practice aus, um ein dediziertes Verzeichnis für die sichere Durchführung der sed-Übungen zu erstellen und dorthin zu wechseln.

mkdir -p ~/sed_practice && cd ~/sed_practice

Führen Sie den Befehl echo -e 'apple is delicious\nbanana is yellow\napple is red' > fruits.txt aus, um eine Beispieldatei mit Textdaten für die Übung zur Zeichenkettenersetzung zu erstellen.

echo -e ‘apple is delicious\nbanana is yellow\napple is red’ > fruits.txt

Der Befehl sed ist ein Stream-Editor zum Verarbeiten und Bearbeiten von Textströmen.
Mit dem Ersetzungsoperator s wird das erste Vorkommen der Zeichenkette apple in jeder Zeile durch orange ersetzt und auf dem Bildschirm ausgegeben.
Der Inhalt der Originaldatei fruits.txt bleibt unverändert; es wird lediglich das Ergebnis über die Standardausgabe angezeigt.
⚙️ [Wichtige Optionen]

-i : Speichert die Änderungen direkt in der Originaldatei, anstatt die Ausgabe auf dem Bildschirm anzuzeigen.
-e : Führt mehrere Bearbeitungsbefehle verkettet in einem einzigen Aufruf aus.
-n : Unterdrückt die automatische Ausgabe des Musterbereichs (Pattern Space) und gibt nur explizit angegebene Zeilen aus.
-E oder -r : Aktiviert die Syntax für erweiterte reguläre Ausdrücke (ERE).

sed ’s/apple/orange/’ fruits.txt

Wenn Sie das Flag g an das Ende des Ersetzungsausdrucks anhängen, werden alle Treffer innerhalb einer Zeile global (global) ersetzt.
Dies wird verwendet, wenn derselbe Suchbegriff mehrfach in einer Zeile vorkommt und ausnahmslos alle Vorkommen geändert werden sollen.

sed ’s/apple/orange/g’ fruits.txt

2. Gezielte Ausgabe und Löschen bestimmter Zeilen (Optionen d und -n)

Führen Sie den Befehl echo -e 'Line 1: Server OK\nLine 2: Server Warning\nLine 3: Server Error\nLine 4: Server OK' > server.log aus, um die für das Filtern und Löschen von Zeilen erforderlichen Protokolldaten in einer Beispieldatei zu generieren.

echo -e ‘Line 1: Server OK\nLine 2: Server Warning\nLine 3: Server Error\nLine 4: Server OK’ > server.log

Kombinieren Sie die Option -n mit dem Befehl p, um nur den angegebenen Bereich von Zeile 2 bis Zeile 3 auf dem Bildschirm auszugeben.
Dies ist nützlich, wenn die Standardausgabe unterdrückt und nur ausgewählte Zeilen überprüft werden sollen.

sed -n ‘2,3p’ server.log

Verwenden Sie den Befehl d in Verbindung mit Mustervergleichen (Pattern Matching), um Zeilen auszuschließen, die die Zeichenkette Warning enthalten, und nur die restlichen Zeilen anzuzeigen.
Dies eignet sich ideal zum Filtern irrelevanter Logs oder bestimmter Bedingungen.

sed ‘/Warning/d’ server.log

Geben Sie eine Zeilennummer an und führen Sie den Befehl d aus, um die 2. Zeile zu löschen und das Ergebnis anzuzeigen.
Verwenden Sie dies, wenn Sie Zeilen mit bestimmten Zeilennummern entfernen und das Ergebnis prüfen möchten.

sed ‘2d’ server.log

3. Direktes Bearbeiten der Originaldatei und automatisches Backup (-i-Option)

Erstellen Sie eine Datei namens config.env mit Beispiel-Umgebungsvariablen für die Übung zur Konfigurationsänderung.

echo -e ‘PORT=8080\nDEBUG=true\nTIMEOUT=30’ > config.env

Mit der Option -i.bak wird eine Sicherungskopie der Originaldatei als config.env.bak erstellt und gleichzeitig der Eintrag DEBUG=true sofort durch DEBUG=false ersetzt und in der Originaldatei gespeichert.
Dies wird verwendet, wenn eine Datei direkt bearbeitet werden soll, während der Ausgangszustand sicher aufbewahrt bleibt.

sed -i.bak ’s/DEBUG=true/DEBUG=false/’ config.env

Überprüfen Sie den Inhalt der bearbeiteten Datei config.env mit dem Befehl cat.
Sie können sehen, dass der Wert von DEBUG erfolgreich zu false geändert und in der Datei übernommen wurde.

cat config.env

Geben Sie den Inhalt der automatisch erstellten Sicherungsdatei config.env.bak aus, um ihn zu überprüfen.
Es ist ersichtlich, dass der ursprüngliche Zustand vor der Änderung mit DEBUG=true unverändert erhalten und sicher gesichert wurde.

cat config.env.bak

4. Fortgeschrittene Textersetzung mit regulären Ausdrücken und alternativen Trennzeichen

Erstellen Sie mit dem Befehl echo die Datei paths.txt mit Pfadbeispielen für die Übung zur Pfadersetzung.

echo -e ‘Old path: /usr/local/bin\nNew path: /usr/local/bin’ > paths.txt

Verwenden Sie das Pipe-Zeichen (|) anstelle des standardmäßigen Schrägstrichs (/) als Trennzeichen für die Ersetzung, um /usr/local/bin im Pfad sicher durch /usr/bin zu ersetzen und auszugeben.
Wenn Sie Dateipfade oder URLs bearbeiten, die Schrägstriche enthalten, können Sie Ausdrücke so übersichtlich ohne Escape-Zeichen (\) formulieren.

sed ’s|/usr/local/bin|/usr/bin|g’ paths.txt

Erstellen Sie die Beispieldatei spaces.txt mit führenden und nachgestellten Leerzeichen, um das Entfernen von Leerzeichen mit regulären Ausdrücken zu üben.

echo -e ’   leading spaces\nno spaces\n   trailing removed   ’ > spaces.txt

Durch das Muster ^ für den Zeilenanfang in Kombination mit dem regulären Ausdruck [ \t]* für Leerzeichen und Tabulatoren werden alle führenden Leerzeichen jeder Zeile entfernt und ausgegeben.
Dies ist besonders nützlich, um Einrückungen und überflüssige Leerzeichen in Dokumenten oder Protokolldaten einheitlich zu bereinigen.

sed ’s/^[ \t]*//’ spaces.txt

In diesem Leitfaden haben wir die wichtigsten Anwendungsbereiche des Linux-Befehls sed zusammengefasst – von der einfachen Textersetzung bis hin zur effizienten Massenbearbeitung von Dateien.
Da es sich um ein äußerst vielseitiges Werkzeug handelt, das wiederkehrende Dateiänderungen drastisch beschleunigt, sollten Sie es bei Bedarf unbedingt in Ihren Arbeitsalltag integrieren.