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
oderI
→ case-insensitive (je nach sed-Version; oft\I
in regex) -
-n
→ unterdrückt automatische Ausgabe (nützlich in Kombination mitp
) -
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
- 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
foo
durchbar
in 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
ERROR
foo
→bar
ersetzen: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
ist
durchwar
in der Datei zur Ausgabe. - Speichere die Änderung mit
-i.bak
und prüfedemo.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