Textumwandlung mit sed
1. Syntax des sed-Befehls
Was ist sed
?
sed
(eine Abkürzung für Stream Editor, also Stream-Editor) ist ein leistungsstarkes Werkzeug für die Textverarbeitung. Es ermöglicht, Zeilen in Textdateien und Datenströmen zu ändern, hinzuzufügen, zu entfernen oder zu transformieren.
Der Hauptvorteil von sed
liegt darin, dass es Texte "on-the-fly" bearbeitet, ohne die Originaldatei zu beeinflussen (es sei denn, du verlangst es explizit). Das macht es zu einem idealen Tool für schnelle und automatische Datenumwandlungen.
Grundsyntax des Befehls
Schauen wir uns die grundlegende Formel für die Arbeit mit sed
an:
sed [Optionen] 'Muster/Aktion' Datei
Wo:
Muster
— der Text oder der reguläre Ausdruck, nach dem gesucht wird.Aktion
— die Operation, die du durchführen möchtest (z. B. Text ersetzen).Datei
— die Textdatei, die die Zeilen enthält, die du ändern möchtest.
Für den Anfang konzentrieren wir uns auf die beliebtesten Aktionen: das Ersetzen von Text (s
— von "substitute") und das Löschen von Zeilen (d
— von "delete").
2. Ersetzen von Text s/alt/neu/
Beispiel 1: Einfacher Textersatz
Angenommen, wir haben eine Datei example.txt
mit folgendem Inhalt:
Hello world!
Welcome to Linux.
Linux is awesome.
Versuchen wir, das Wort "Linux" durch sed
zu ersetzen:
sed 's/Linux/sed/' example.txt
Die Ausgabe sieht dann so aus:
Hello world!
Welcome to sed.
sed is awesome.
Das war's. Das Wort "Linux" wurde in jeder Zeile nur einmal durch sed
ersetzt. Das ist das Standardverhalten.
Beispiel 2: Globales Ersetzen
Wenn du alle Vorkommen des Wortes in einer Zeile statt nur des ersten ersetzen möchtest, füge das Flag g
(global) hinzu:
sed 's/Linux/sed/g' example.txt
Wenn es in einer Zeile mehrfach "Linux" gibt, werden sie alle durch sed
ersetzt.
Beispiel 3: Groß- und Kleinschreibung ignorieren
Um Text unabhängig von der Groß- und Kleinschreibung zu ersetzen, füge das Flag I
(oder i
, je nach Version) hinzu:
sed 's/linux/sed/gi' example.txt
Das ersetzt die Wörter "Linux", "LINUX", "LiNuX" usw.
Beispiel 4: Ersetzen und Ergebnis speichern
Standardmäßig gibt sed
das Ergebnis nur in der Konsole aus, ohne die Datei zu ändern. Wenn du die Änderungen direkt in die Datei schreiben möchtest, füge die Option -i
(in-place) hinzu:
sed -i 's/Linux/sed/g' example.txt
Jetzt wird die Datei example.txt
mit den Ersetzungen aktualisiert.
3. Entfernen von Zeilen /Muster/d
Beispiel 1: Entfernen von Zeilen nach einem Muster
Wenn du alle Zeilen löschen möchtest, die das Wort "Linux" enthalten:
sed '/Linux/d' example.txt
Die Ausgabe sieht so aus:
Hello world!
Hier wurden die Zeilen entfernt, in denen "Linux" vorkam.
Zeilen nach Nummer löschen
Es ist möglich, eine Zeile nach ihrer Nummer zu löschen. Zum Beispiel, um die zweite Zeile zu löschen, verwenden wir:
sed '2d' example.txt
Ausgabe:
Hello world!
Linux is awesome.
Zum Löschen mehrerer Zeilen: Gib einen Bereich an, z. B., um Zeilen von der zweiten bis zur dritten zu löschen:
sed '2,3d' example.txt
4. Arbeiten mit Regular Expressions
Hier zeigt sed
wirklich seine Kraft! In den Mustern kannst du Regular Expressions verwenden, um komplexere Übereinstimmungen zu finden.
Beispiel 1: Ersetzen von Wörtern mit einem bestimmten Muster
Angenommen, im Text gibt es folgende Zeilen:
error: something went wrong
warning: check your system
error: unable to connect
Wir wollen alle Zeilen ersetzen, die mit "error" beginnen, durch "Problem festgestellt". Dabei helfen uns die Regular Expressions:
sed 's/^error:.*/Problem festgestellt/' logs.txt
Wo:
^
— gibt den Beginn der Zeile an..*
— bedeutet "alles, was danach kommt".
Ergebnis:
Problem festgestellt
warning: check your system
Problem festgestellt
5. Einfügen und Hinzufügen von Zeilen
Zeile vor einem Treffer einfügen
Um eine Zeile vor jeder Zeile einzufügen, die "Linux" enthält:
sed '/Linux/i\# Lernen macht Spaß' example.txt
Ergebnis:
Hello world!
Welcome to Linux.
# Lernen macht Spaß
Linux is awesome.
Beispiel 2: Zeile nach einem Treffer hinzufügen
Um Text nach einer Zeile mit einem Muster hinzuzufügen:
sed '/Linux/a\# sed macht es einfacher' example.txt
Ergebnis:
Hello world!
Welcome to Linux.
# sed macht es einfacher
Linux is awesome.
# sed macht es einfacher
6. Praxis: Verarbeitung von Konfigurationsdateien
Versuchen wir eine praktische Aufgabe zu lösen. Stell dir vor, du hast eine Konfigurationsdatei config.txt
:
host=localhost
port=8080
mode=production
logfile=/var/log/app.log
Aufgabe 1: Ersetzen von "localhost" durch "127.0.0.1"
sed -i 's/localhost/127.0.0.1/' config.txt
Ergebnis:
host=127.0.0.1
port=8080
mode=production
logfile=/var/log/app.log
Aufgabe 2: Den Port um 1 erhöhen
Dazu nutzen wir sed
mit einem kleinen Trick:
sed -i 's/port=8080/port=8081/' config.txt
Ergebnis:
host=127.0.0.1
port=8081
mode=production
logfile=/var/log/app.log
Aufgabe 3: Zeilen mit logfile
löschen
Falls die Konfiguration keine Protokollierung mehr benötigt, löschen wir die Zeile:
sed -i '/logfile/d' config.txt
Ergebnis:
host=127.0.0.1
port=8081
mode=production
7. Kombination mit anderen Befehlen
sed
funktioniert super in Verbindung mit anderen Linux-Tools. Zum Beispiel:
grep "error" logs.txt | sed 's/error/ERROR/'
Hier suchen wir zuerst nach Zeilen mit Fehlern und formatieren sie dann.
Typische Fehler und wie man sie vermeidet
- Fehler: Option
-i
vergessen. Anfänger erwarten oft, dasssed
die Datei ändert, fügen aber kein-i
hinzu. Vergiss nicht, dies explizit anzugeben, wenn du Änderungen in der Datei vornehmen möchtest. - Fehler: Anführungszeichen. In einigen Systemen, besonders wenn einfache Anführungszeichen verwendet werden, kann
\
vor Sonderzeichen falsch funktionieren. Immer die Zeichen richtig maskieren. - Fehler mit Zeilenbereichen. Wenn du Bereiche verwendest (z. B.
2,3d
), stelle sicher, dass sie korrekt angegeben sind — die Datei sollte nicht leer sein.
GO TO FULL VERSION