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
sedliest 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)ioderI→ case-insensitive (je nach sed-Version; oft\Iin regex)-n→ unterdrückt automatische Ausgabe (nützlich in Kombination mitp)p(print) → druckt Zeilen (häufig mit-nkombiniert)sed -n 's/old/new/p' datei
-i→ in-place: Datei direkt ändern (vorsichtig verwenden)- Sicherer:
-i.bakerstellt eine Backup-Datei:sed -i.bak 's/old/new/g' datei
- Sicherer:
🔹 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
- Ersetze
foodurchbarin einer Datei:sed 's/foo/bar/g' file.txt
- Lösche alle Kommentarzeilen (beginnend mit
#):sed ’s/foo/bar/g‘ file.txtsed '/^#/d' file.conf
- Ersetze Pfade mit
/in Pattern (anderes Delimiter):sed 's|/home/user|/mnt/backup|g' config
- Nur in Zeilen mit
ERRORfoo→barersetzen:sed '/ERROR/s/foo/bar/g' logfile
- 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
istdurchwarin der Datei zur Ausgabe. - Speichere die Änderung mit
-i.bakund prüfedemo.txt.bak.
2. Datei paths.txt enthält /home/user/docs und /home/user/images:
- Ersetze
/home/userdurch/srv/datamit 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.csvmit #-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+pfür gezielte Ausgabe,-imit 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.sedfü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
