3.9 KiB
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
- IT-Know-How/Linux/BASH Basics/grep - Textsuche
- IT-Know-How/Linux/BASH Basics/awk - Komplexere Textverarbeitung
- IT-Know-How/Linux/BASH Basics/find - Dateien finden und mit sed bearbeiten
- IT-Know-How/Linux/BASH Basics/BASH Funktionen - sed in Funktionen verwenden