CodeGym /Kurse /Docker SELF /Textumwandlung mit sed

Textumwandlung mit sed

Docker SELF
Level 8 , Lektion 1
Verfügbar

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, dass sed 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.
Kommentare
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION