sed (Stream Editor) ist ein nicht-interaktives Tool, das Text stromweise verarbeitet: Zeile für Zeile lesen, nach Regeln verändern und ausgeben. Es ist extrem schnell, eignet sich für Batch-Änderungen in großen Dateien und lässt sich nahtlos in Pipes und Skripte integrieren. In diesem Kapitel lernst du die wichtigsten Grundbefehle und Konzepte, damit du sofort produktiv mit sed arbeiten kannst.

🔹 Wie sed grundsätzlich arbeitet

  • sed liest Eingabetext (Datei oder STDIN) zeilenweise.
  • Für jede Zeile wird eine oder mehrere Anweisungen ausgeführt.
  • Standardmäßig schreibt sed die veränderte Zeile auf STDOUT (Ausgabe), die Originaldatei bleibt unangetastet — außer du nutzt -i (in-place).
  • Typische Einsatzweise: sed 's/pattern/replacement/' datei oder in einer Pipeline: cat datei | sed '...'.

🔹 Der grundlegende Ersetzungsbefehl s

Syntax:

sed 's/ALT/NEU/' datei

Beispiel: Ersetze das erste Vorkommen von Alice in jeder Zeile durch Alicia:

sed 's/Alice/Alicia/' users.txt

Wichtig:

  • Standardmäßig nur erstes Vorkommen pro Zeile.
  • g-Flag (global) ersetzt alle Vorkommen in der Zeile:
    sed 's/alt/neu/g' datei
  • Du kannst andere Trennzeichen verwenden (praktisch, wenn / im Muster vorkommt):
    sed 's|/home/user|/mnt/backup|g' datei

🔹 Flags & Optionen (häufig genutzt)

  • g → global (alle Vorkommen in der Zeile)
  • i oder I → case-insensitive (je nach sed-Version; oft \I in regex)
  • -n → unterdrückt automatische Ausgabe (nützlich in Kombination mit p)
  • p (print) → druckt Zeilen (häufig mit -n kombiniert)
    sed -n 's/old/new/p' datei
  • -i → in-place: Datei direkt ändern (vorsichtig verwenden)
    • Sicherer: -i.bak erstellt eine Backup-Datei:
      sed -i.bak 's/old/new/g' datei
      

🔹 Adressierung: Welche Zeilen verändern?

Du kannst spezifizieren, auf welche Zeilen eine Anweisung angewendet wird.

  • Einzelne Zeile (z. B. Zeile 3):
    sed '3s/alt/neu/' datei
  • Bereich von Zeilen (z. B. Zeile 2–4):
    sed '2,4s/alt/neu/' datei
  • Zeilen mit Muster:
    sed '/ERROR/s/old/new/' logfile

→ Nur Zeilen, die ERROR enthalten, werden bearbeitet.

🔹 Löschen, Einfügen, Ersetzen ganzer Zeilen

  • Löschen (d):
    sed '/^#/d' datei         # Löscht Kommentarzeilen, die mit # beginnen
    sed '2d' datei             # Löscht die zweite Zeile
  • Einfügen vor einer Zeile (i) — sed-Programmdatei oder mit -e (in-place beachten):
    sed '2i\Neue Zeile' datei   # Fügt vor Zeile 2 "Neue Zeile" ein
  • Anhängen nach einer Zeile (a):
    sed '2a\Anhänge dort' datei
  • Ganze Zeile ersetzen (c – change):
    sed '3c\Dies ist die neue dritte Zeile' datei

👉 Hinweis: Zeilenumbrüche und Backslashes in i/a/c sind sed-kontextabhängig; in Shell-Einzeilern oft mit \ arbeiten oder Skriptdatei verwenden.

🔹 Reguläre Ausdrücke kurz (POSIX-Basis)

  • ^ → Zeilenanfang, $ → Zeilenende
  • . → beliebiges Zeichen
  • * → 0 oder mehr des vorherigen Zeichens
  • \+ bzw. \{m,n\} → Wiederholungen (je nach sed-Version; GNU sed unterstützt \+)
  • Zeichenklassen: [0-9], [A-Za-z], [^#] (nicht #)
    Beispiel: Lösche Zeilen, die mit einer Zahl beginnen:
    sed '/^[0-9]/d' datei

🔹 Mehrere Befehle / Skriptdatei

Du kannst mehrere sed-Anweisungen kombinieren:

  • Mit -e:
    sed -e 's/alt/neu/g' -e '/^#/d' datei
  • Oder in einer Datei script.sed:
    /^#/d
    s/old/new/g
    5,10d
    

    Und ausführen:

    sed -f script.sed datei

Das ist besser für längere Bearbeitungsschritte und reproduzierbare Änderungen.

🔹 sed in Pipelines

sed ist perfekt, um Daten für weitere Tools vorzubereiten, z. B.:

cat logfile | sed '/^#/d' | sed 's/old/new/g' | awk '{print $1, $3}'

Oft reicht eine einzelne sed-Pipeline:

sed '/^#/d; s/,/./g' daten.csv | awk -F';' '{print $1, $2}'

🔹 Vorsicht: -i und Backups

-i ändert Dateien direkt. Für Sicherheit:

sed -i.bak 's/old/new/g' datei    # Original liegt in datei.bak

Wenn du Inplace ohne Backup machst, verlierst du die Originalversion – nutze -i bedacht, besonders auf Produktionssystemen.

🔹 Praktische Beispiele

  1. Ersetze foo durch bar in einer Datei:
    sed 's/foo/bar/g' file.txt
  2. Lösche alle Kommentarzeilen (beginnend mit #):sed ’s/foo/bar/g‘ file.txt
    sed '/^#/d' file.conf
  3. Ersetze Pfade mit / in Pattern (anderes Delimiter):
    sed 's|/home/user|/mnt/backup|g' config
  4. Nur in Zeilen mit ERROR foobar ersetzen:
    sed '/ERROR/s/foo/bar/g' logfile
  5. Füge vor Zeile 1 eine Kopfzeile ein:
    sed '1i\# Log-Report' logfile

🔹 Übungen

1. Erstelle demo.txt:

# Das ist ein Kommentar
Alice ist 25 Jahre alt
Bob ist 30 Jahre alt
  • Entferne die Kommentarzeile mit sed.
  • Ersetze ist durch war in der Datei zur Ausgabe.
  • Speichere die Änderung mit -i.bak und prüfe demo.txt.bak.

2. Datei paths.txt enthält /home/user/docs und /home/user/images:

  • Ersetze /home/user durch /srv/data mit sed (achte auf / im Muster).

3: Datei lines.txt hat viele Zeilen:

  • Lösche Zeile 2 bis 4 (2,4d)
  • Füge nach Zeile 3 die Zeile --- ein.

4. Kombinationsübung:

  • Nimm eine raw.csv mit #-Kommentarzeilen und Kommas als Dezimaltrenner (1,23).
  • Entferne Kommentare, ersetze , durch . in den Zahlen und gib die bereinigte Ausgabe.
  • (Tipp: sed '/^#/d; s/,/./g' raw.csv)

✅ Zusammenfassung

sed ist ein Stream-Editor: schnell, nicht interaktiv, ideal für Batch-Textmanipulationen.

  • Kernbefehle: s/// (Ersetzen), d (löschen), i/a/c (einfügen/anhängen/ersetzen) und Adressierung (Zeilennummern, Bereiche, Muster).
  • Nutze -n + p für gezielte Ausgabe, -i mit Backup für sichere Inplace-Änderungen.
  • Kombiniere sed mit Pipes und awk für vollständige Daten-Pipelines.
  • Schreibe längere Sed-Skripte in Dateien und verwende sed -f script.sed für Übersicht und Wiederverwendbarkeit.

👉 Im nächsten Kapitel lernst du, wie du wie du mit Hilfe von Regex suchen & ersetzen kannst.

📚 Inhaltsverzeichnis

👉 sed Kapitel 1: Grundlagen von sed – erste Ersetzungen & Konzepte
👉 sed Kapitel 2: Suchen & Ersetzen mit sed – Grundlagen & Regex
👉 sed Kapitel 3: Zeilen bearbeiten mit sed
👉 sed Kapitel 4: sed-Skripte schreiben & kombinieren
👉 sed Kapitel 5: sed in Kombination mit anderen Tools
👉 sed Kapitel 6: Praxisprojekt – Konfigurationsdateien automatisch bereinigen & anpassen

⭐ Bonus-Kapitel

👉 sed Kapitel 7: Bonus – Profi-Tipps & Best Practices für sed im Alltag