Eine übersichtliche Darstellung des Befehls sed

Der Stream Editor sed ist ein kraftvolles Werkzeug zur Textmanipulation in Unix-ähnlichen Systemen. Er ermöglicht die Verarbeitung und Umwandlung von Textdaten mithilfe von regulären Ausdrücken. Dieser Beitrag bietet eine detaillierte Übersicht über die Verwendung von sed, erklärt die wichtigsten Parameter und bietet praktische Beispiele.

Grundlegende Syntax

sed [OPTIONEN] 'BEFEHLE' DATEI
  • OPTIONEN: Steuert das Verhalten von sed.
  • BEFEHLE: Gibt die auszuführenden Anweisungen an.
  • DATEI: Die Eingabedatei, die verarbeitet werden soll.

Häufig verwendete Optionen

-e : Skript hinzufügen

Ermöglicht das Angeben mehrerer sed-Skripte.

sed -e 'BEFEHL1' -e 'BEFEHL2' DATEI

-i : In-Place-Editierung

Verändert die Datei direkt ohne Ausgabe auf STDOUT.

sed -i 's/alt/neu/g' DATEI
  • -i: Aktiviert das Überschreiben der Originaldatei.
  • s/alt/neu/g: Ersetzt alle Vorkommen von “alt” durch “neu”.
  • DATEI: Die zu ändernde Datei.

-n : Unterdrückt automatische Ausgabe

Gibt nur explizit mit p angeforderte Zeilen aus.

sed -n '/Muster/p' DATEI
  • -n: Unterdrückt die Standardausgabe.
  • /Muster/p: Druckt nur Zeilen, die dem Muster entsprechen.

-f : Skriptdatei verwenden

Lädt sed-Befehle aus einer Datei.

sed -f skript.sed DATEI
  • -f skript.sed: Verwendet die Befehle aus “skript.sed”.

Wichtige sed-Befehle

s : Ersetzen (substitute)

Syntax:

s/REGEX/ERSATZ/FLAGS
  • REGEX: Das zu suchende Muster.
  • ERSATZ: Der Ersatztext.
  • FLAGS: Zusätzliche Optionen, z.B. g für globales Ersetzen.

d : Löschen

Löscht Zeilen, die dem Muster entsprechen.

sed '/Muster/d' DATEI
  • /Muster/d: Löscht Zeilen mit dem Muster “Muster”.

a : Anfügen (append)

Fügt nach der aktuellen Zeile Text hinzu.

sed '/Muster/a Text zum Anfügen' DATEI
  • /Muster/a Text: Fügt “Text” nach Zeilen mit “Muster” an.

i : Einfügen (insert)

Fügt vor der aktuellen Zeile Text hinzu.

sed '/Muster/i Eingefügter Text' DATEI
  • /Muster/i Text: Fügt “Text” vor Zeilen mit “Muster” ein.

p : Ausgeben (print)

Gibt Zeilen aus, kann mit -n kombiniert werden.

sed -n '/Muster/p' DATEI

Praktische Beispiele mit Erläuterungen

Beispiel 1: Einfaches Ersetzen

Ersetze das erste Vorkommen von “Apfel” durch “Birne” in jeder Zeile.

sed 's/Apfel/Birne/' datei.txt
  • s/Apfel/Birne/: Ersetzt “Apfel” mit “Birne”.
  • Ohne Flag g wird nur das erste Vorkommen pro Zeile ersetzt.

Beispiel 2: Globales Ersetzen

Ersetze alle Vorkommen von “Apfel” durch “Birne”.

sed 's/Apfel/Birne/g' datei.txt
  • g: Steht für “global”, ersetzt alle Vorkommen.

Beispiel 3: Ersetzen mit Regex

Ersetze alle Zahlen durch ”#“.

sed 's/[0-9]/#/g' datei.txt
  • [0-9]: Regulärer Ausdruck für Ziffern von 0 bis 9.
  • #/: Ersetzt durch ”#“.

Beispiel 4: Zeilen mit Muster löschen

Lösche alle Zeilen, die das Wort “Fehler” enthalten.

sed '/Fehler/d' datei.txt
  • /Fehler/d: Löscht Zeilen mit “Fehler”.

Beispiel 5: Zeilen zwischen Mustern ausgeben

Gibt Zeilen zwischen “START” und “ENDE” aus.

sed -n '/START/,/ENDE/p' datei.txt
  • -n: Unterdrückt die Standardausgabe.
  • /START/,/ENDE/p: Gibt Zeilen von “START” bis “ENDE” aus.

Beispiel 6: Text nach Muster einfügen

Fügt nach jeder Zeile mit “Kapitel” den Text ”= Ende des Kapitels =” ein.

sed '/Kapitel/a === Ende des Kapitels ===' buch.txt
  • /Kapitel/a: Zielmuster “Kapitel”, fügt danach Text an.

Beispiel 7: In-Place-Editierung mit Backup

Ersetzt “foo” durch “bar” und erstellt eine Backup-Datei mit der Endung .bak.

sed -i.bak 's/foo/bar/g' datei.txt
  • -i.bak: Führt In-Place-Editierung durch und sichert Original als datei.txt.bak.
  • s/foo/bar/g: Ersetzt alle Vorkommen von “foo” mit “bar”.

Beispiel 8: Mehrere Ersetzungen nacheinander

Ersetzt “Apfel” durch “Orange” und “Banane” durch “Traube”.

sed -e 's/Apfel/Orange/g' -e 's/Banane/Traube/g' obst.txt
  • -e: Ermöglicht Angabe mehrerer Befehle.
  • Erster Befehl: Ersetzt “Apfel” mit “Orange”.
  • Zweiter Befehl: Ersetzt “Banane” mit “Traube”.

Reguläre Ausdrücke in sed

sed unterstützt das volle Spektrum regulärer Ausdrücke.

Zeichenklassen

  • [a-z]: Kleinbuchstaben a bis z.
  • [A-Z]: Großbuchstaben A bis Z.
  • [0-9]: Ziffern 0 bis 9.

Sonderzeichen

  • .: Beliebiges einzelnes Zeichen.
  • *: Vorheriges Element null- oder mehrfach.
  • ^: Anfang der Zeile.
  • $: Ende der Zeile.

Beispiel: Zeilen, die mit “Test” beginnen

sed -n '/^Test/p' datei.txt
  • ^Test: Muster beginnt am Zeilenanfang mit “Test”.

Beispiel: Zeilen, die auf Punkt enden

sed -n '/\.$/p' datei.txt
  • \.$: Escaped den Punkt . und matcht Zeilen, die mit . enden.

Zusammenfassung der Flags beim Ersetzen

  • g: Globales Ersetzen in der Zeile.
  • p: Druckt die Zeile nach der Ersetzung.
  • i: Ignoriert Groß-/Kleinschreibung.

Beispiel mit Flags

Ersetzt “Test” durch “Prüfung”, ignoriert Groß-/Kleinschreibung und druckt die Ergebnisse.

sed -n 's/Test/Prüfung/gi;p' datei.txt
  • i: Ignoriert Fälle wie “test”, “Test”, “TEST”.
  • p: Gibt die Zeilen nach der Ersetzung aus.
  • -n: Unterdrückt sonstige Ausgaben, so dass nur geänderte Zeilen ausgegeben werden.

Tags

sedLinuxShellRegexTextverarbeitungCheatsheet

Linux-Blog-Overview