====== 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 ===== * Zugriff auf die Linux-Kommandozeile * Grundkenntnisse in [[sammlung:bash_kommandos|Bash-Kommandos]] * Optional: Verständnis für reguläre Ausdrücke ===== 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///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 ===== * sed arbeitet standardmäßig mit POSIX Basic Regular Expressions (BRE); nutze ''-E'' für erweiterte Regex * Bei ''-i'' ohne Backup-Endung werden Originaldateien unwiderruflich überschrieben * sed verarbeitet Streams; für komplexe Logik nutze [[sammlung:awk|awk]] oder Skriptsprachen * Trennzeichen in s-Befehl kann geändert werden: ''s|alt|neu|g'' oder ''s#alt#neu#g'' * sed beendet sich nach dem ersten Match mit ''q''-Befehl (nützlich bei großen Dateien) ===== Fehlerbehebung ===== * **Nicht gefunden**: Prüfe Regex-Syntax; nutze ''-E'' für erweiterte Ausdrücke * **Ungültige Rückreferenz**: Verwende ''\\1'' statt ''\1'' in BRE * **Datei nicht geändert**: Prüfe, ob ''-i'' verwendet wurde * **Unerwartete Ausgabe**: Teste zuerst ohne ''-i'', dann mit ''-n'' und ''p''-Befehl ===== Siehe auch ===== * [[sammlung:grep|grep - Text durchsuchen]] * [[sammlung:awk|awk - Textverarbeitung und Datenextraktion]] * [[sammlung:bash_kommandos|Bash Kommandos Übersicht]] * [[sammlung:vim|vim - Texteditor mit erweiterten Funktionen]] {{tag>linux kommandozeile text editor manipulation regex automatisierung}}