Files
2026-09-02 16:32:50 +02:00

3.9 KiB

sed - Stream Editor

Der sed-Befehl ist ein Stream-Editor für Textmanipulation. Er eignet sich besonders für Suchen-und-Ersetzen-Operationen.

Grundsyntax

sed [OPTIONEN] 'BEFEHL' [DATEI...]

Suchen und Ersetzen

Grundlegendes Ersetzen

sed 's/alt/neu/' datei.txt

Ersetzt erste Vorkommen in jeder Zeile.

Alle Vorkommen in Zeile

sed 's/alt/neu/g' datei.txt
  • g = global (alle Vorkommen)

Datei direkt ändern

sed -i 's/alt/neu/g' datei.txt
  • -i = in-place (Datei wird geändert)

Backup vor Änderung

sed -i.bak 's/alt/neu/g' datei.txt

Erstellt datei.txt.bak vor Änderung.

Zeilen auswählen

Bestimmte Zeile

sed -n '5p' datei.txt       # Nur Zeile 5
sed '5d' datei.txt          # Zeile 5 löschen
sed '5s/alt/neu/' datei.txt # Nur in Zeile 5 ersetzen

Zeilenbereich

sed -n '10,20p' datei.txt   # Zeilen 10-20 anzeigen
sed '10,20d' datei.txt      # Zeilen 10-20 löschen

Letzte Zeile

sed -n '$p' datei.txt       # Letzte Zeile

Muster-basiert

sed '/^#/d' datei.txt       # Zeilen mit # am Anfang löschen
sed '/ERROR/s/foo/bar/' datei.txt  # Nur in Zeilen mit ERROR

Zeilen einfügen und anhängen

Vor Zeile einfügen

sed '3i\Neue Zeile' datei.txt

Nach Zeile anhängen

sed '3a\Neue Zeile' datei.txt

Nach Muster

sed '/TODO/a\WICHTIG: Bitte bearbeiten' datei.txt

Zeilen löschen

Leere Zeilen

sed '/^$/d' datei.txt

Kommentare

sed '/^#/d' datei.txt

Mehrere Muster

sed -e '/^#/d' -e '/^$/d' datei.txt

Reguläre Ausdrücke

Erweiterte Regex

sed -E 's/[0-9]{3}-[0-9]{4}/XXX-XXXX/g' datei.txt
  • -E = Extended Regex

Gruppen und Backreferences

sed 's/\([0-9]*\)-\([0-9]*\)/\2-\1/' datei.txt

Vertauscht Zahlen vor und nach Bindestrich.

Mit -E:

sed -E 's/([0-9]*)-([0-9]*)/\2-\1/' datei.txt

Praktische Beispiele

Konfigurationsdatei ändern

sed -i 's/^#Port 22/Port 2222/' /etc/ssh/sshd_config

IP-Adressen ersetzen

sed 's/192\.168\.1\./10.0.0./g' config.txt

Zeilennummern hinzufügen

sed = datei.txt | sed 'N;s/\n/\t/'

Kommentare und Leerzeilen entfernen

sed -e '/^#/d' -e '/^$/d' config.conf

Mehrere Ersetzungen

sed -e 's/foo/bar/g' -e 's/alt/neu/g' datei.txt

Case-insensitive Suche

sed 's/fehler/ERROR/gI' datei.txt
  • I = case-insensitive

Zeilen mit Muster extrahieren

sed -n '/ERROR/p' logfile.txt

Zeigt nur Zeilen mit "ERROR".

Text zwischen Mustern

sed -n '/START/,/END/p' datei.txt

Zeilen nummerieren

sed = datei.txt

Mit Pipes

cat datei.txt | sed 's/alt/neu/g' | grep wichtig
ps aux | sed -n '1p;/firefox/p'

Mehrere Dateien

sed -i 's/alt/neu/g' *.txt

Sed-Skripte

script.sed:

# Kommentare entfernen
/^#/d
# Leerzeilen entfernen
/^$/d
# foo durch bar ersetzen
s/foo/bar/g

Verwenden:

sed -f script.sed datei.txt

Fehler vermeiden

Backup erstellen

sed -i.bak 's/alt/neu/g' wichtig.txt

Testen ohne Änderung

sed 's/alt/neu/g' datei.txt > test.txt
diff datei.txt test.txt

Spezialzeichen escapen

# Punkt ist Wildcard
sed 's/192.168.1.1/10.0.0.1/' config  # FALSCH

# Punkt escapen
sed 's/192\.168\.1\.1/10.0.0.1/' config  # RICHTIG

Alternative Delimiter

Wenn Pfade mit / vorkommen:

sed 's|/old/path|/new/path|g' datei.txt

Statt / kann |, # oder andere Zeichen verwendet werden.

Siehe auch