Inhaltsverzeichnis

sed

sed (Stream Editor) ist ein mächtiges Kommandozeilenwerkzeug zur Textmanipulation. Es verarbeitet Text zeilenweise und führt Operationen wie Suchen, Ersetzen, Einfügen und Löschen durch. sed ist besonders nützlich für automatisierte Textverarbeitung in Skripten und Pipelines.

Voraussetzungen

Grundlegende Syntax

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

Häufige Anwendungsfälle

Text ersetzen

# Erste Vorkommen in jeder Zeile ersetzen
sed 's/alt/neu/' datei.txt
 
# Alle Vorkommen in jeder Zeile ersetzen (global)
sed 's/alt/neu/g' datei.txt
 
# Datei direkt bearbeiten (in-place)
sed -i 's/alt/neu/g' datei.txt
 
# Backup vor Änderung erstellen
sed -i.bak 's/alt/neu/g' datei.txt

Groß-/Kleinschreibung ignorieren

sed 's/fehler/ERROR/gi' datei.txt

Zeilen löschen

# Leere Zeilen löschen
sed '/^$/d' datei.txt
 
# Kommentarzeilen löschen
sed '/^#/d' config.conf
 
# Zeile 5 löschen
sed '5d' datei.txt
 
# Zeilen 10-20 löschen
sed '10,20d' datei.txt
 
# Zeilen mit bestimmtem Muster löschen
sed '/DEBUG/d' log.txt

Zeilen einfügen und anhängen

# Zeile vor Zeile 3 einfügen
sed '3i\Neue Zeile' datei.txt
 
# Zeile nach Zeile 5 anhängen
sed '5a\Neue Zeile' datei.txt
 
# Vor Muster einfügen
sed '/PATTERN/i\Neue Zeile' datei.txt

Bestimmte Zeilen ausgeben

# Nur Zeile 5 ausgeben
sed -n '5p' datei.txt
 
# Zeilen 10-20 ausgeben
sed -n '10,20p' datei.txt
 
# Zeilen mit Muster ausgeben
sed -n '/ERROR/p' log.txt

Erweiterte Operationen

Mehrere Befehle kombinieren

# Mit Semikolon
sed 's/foo/bar/g; s/alt/neu/g' datei.txt
 
# Mit -e Option
sed -e 's/foo/bar/g' -e 's/alt/neu/g' datei.txt
 
# Aus Skript-Datei
sed -f befehle.sed datei.txt

Zeilen ersetzen

# Zeile 3 komplett ersetzen
sed '3c\Neue komplette Zeile' datei.txt
 
# Zeilen mit Muster ersetzen
sed '/OLD/c\Neue Zeile' datei.txt

Adressbereiche

# Nur in Zeilen 5-10 ersetzen
sed '5,10s/alt/neu/g' datei.txt
 
# Vom ersten Muster bis zum zweiten
sed '/START/,/END/s/foo/bar/g' datei.txt
 
# Jede zweite Zeile
sed '1~2s/alt/neu/g' datei.txt

Reguläre Ausdrücke und Gruppen

# Rückreferenzen verwenden
sed 's/\([0-9]*\)-\([0-9]*\)/\2-\1/' datei.txt
 
# IP-Adressen formatieren
sed -E 's/([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})/IP: \1.\2.\3.\4/' network.log
 
# E-Mail-Adressen maskieren
sed -E 's/([a-zA-Z0-9._%+-]+)@([a-zA-Z0-9.-]+\.[a-zA-Z]{2,})/[EMAIL]/g' datei.txt

Praktische Beispiele

Konfigurationsdateien bearbeiten

# Port in Konfiguration ändern
sed -i 's/Port 22/Port 2222/' /etc/ssh/sshd_config
 
# Kommentar entfernen (aktivieren)
sed -i 's/^#PermitRootLogin/PermitRootLogin/' /etc/ssh/sshd_config
 
# Zeile am Ende hinzufügen
sed -i '$a\neue_option = wert' config.ini

Log-Dateien bereinigen

# Timestamps entfernen
sed 's/^[0-9]\{4\}-[0-9]\{2\}-[0-9]\{2\} [0-9:]*//g' log.txt
 
# DEBUG-Zeilen entfernen und Ausgabe speichern
sed '/DEBUG/d' application.log > clean.log
 
# IP-Adressen anonymisieren
sed -E 's/[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}/XXX.XXX.XXX.XXX/g' access.log

CSV/Text-Dateien bearbeiten

# Trennzeichen ändern (Komma zu Semikolon)
sed 's/,/;/g' data.csv
 
# Spalten tauschen (Tab-getrennt)
sed -E 's/^([^\t]*)\t([^\t]*)/\2\t\1/' data.tsv
 
# Anführungszeichen entfernen
sed 's/"//g' datei.txt

HTML/XML bearbeiten

# HTML-Tags entfernen
sed 's/<[^>]*>//g' seite.html
 
# Bestimmtes Tag ersetzen
sed 's/<old>/<new>/g' datei.xml

Nützliche Optionen

Option Bedeutung
-n Unterdrückt automatische Ausgabe (nur mit p-Befehl)
-e Mehrere Befehle angeben
-i Datei direkt bearbeiten (in-place)
-i.bak Backup vor in-place-Änderung erstellen
-r, -E Erweiterte reguläre Ausdrücke (ERE)
-f Befehle aus Datei lesen

Wichtige sed-Befehle

Befehl Funktion
s/alt/neu/ Ersetzen (substitute)
d Zeile löschen (delete)
p Zeile ausgeben (print)
a\ Zeile anhängen (append)
i\ Zeile einfügen (insert)
c\ Zeile ersetzen (change)
q sed beenden (quit)
= Zeilennummer ausgeben
y/abc/xyz/ Zeichen transformieren

Kombination mit anderen Tools

# Mit grep
grep "ERROR" log.txt | sed 's/^.*ERROR: //'
 
# Mit find
find . -name "*.txt" -exec sed -i 's/alt/neu/g' {} \;
 
# Mit awk
cat datei.txt | sed 's/foo/bar/g' | awk '{print $1}'
 
# In Pipe-Chain
cat access.log | sed 's/GET/REQUEST/' | grep "404" | wc -l

Hinweise

Fehlerbehebung

Siehe auch