Sed Grundlagen
Zur Navigation springen
Zur Suche springen
Sed – Grundlagen
- Sed (Stream Editor) ist ein mächtiges Kommandozeilenwerkzeug zur Bearbeitung von Textdateien.
- Es arbeitet zeilenweise und kann Texte durchsuchen, ersetzen, löschen, einfügen oder filtern.
- Sed eignet sich besonders für automatisierte Textverarbeitung und Skripting.
Grundprinzip
- Sed liest Zeilen einer Datei oder Eingabe von STDIN.
- Befehle werden sequentiell auf jede Zeile angewendet.
- Die Standardausgabe ist STDOUT, die Datei selbst bleibt unverändert, sofern nicht -i verwendet wird.
- Sed arbeitet mit einem Pattern Space (Aktuelle Zeile) und Hold Space (Zwischenspeicher).
Syntax
sed [OPTIONEN] 'BEFEHL' datei
sed [OPTIONEN] -e 'BEFEHL1' -e 'BEFEHL2' datei
sed [OPTIONEN] -f skript.sed datei
Adressierung
- Keine Adresse: Befehl auf alle Zeilen anwenden
- Zeilennummer: `sed '5d'` - Zeile 5 löschen
- Zeilenbereich: `sed '2,5d'` - Zeilen 2-5 löschen
- Letzte Zeile: `sed '$d'` - Letzte Zeile löschen
- Reguläre Ausdrücke: `sed '/^#/d'` - Zeilen die mit # beginnen löschen
Wichtige Optionen
- -n → Unterdrückt die automatische Ausgabe aller Zeilen (nützlich mit p)
- -i[SUFFIX] → Bearbeitet die Datei direkt (mit optionalem Backup)
- -e → Ermöglicht die Angabe mehrerer Sed-Befehle
- -f → Liest Sed-Befehle aus Datei
- -r → Erweitere reguläre Ausdrücke (ERE statt BRE)
- -l → Zeilenlänge für Ausgabe festlegen
Befehlsgruppen
Ausgabe-Befehle
- p → Zeile ausgeben
- = → Zeilennummer ausgeben
- l → Zeile mit Steuerzeichen anzeigen
Lösch-Befehle
- d → Zeile löschen
- D → Erste Zeile des Pattern Space löschen
Einfüge-Befehle
- i → Text vor Zeile einfügen
- a → Text nach Zeile anhängen
- c → Zeile durch Text ersetzen
Transformations-Befehle
- s → Ersetzen (Substitution)
- y → Zeichen transliterieren (wie tr)
- r → Dateiinhalt nach Zeile einlesen
- w → Zeile in Datei schreiben
Branch-Befehle
- b → Sprung zu Label (Branch)
- t → Sprung bei erfolgreicher Substitution (Test)
- : → Label definieren
Hold-Space-Befehle
- h → Pattern Space in Hold Space kopieren
- H → Pattern Space an Hold Space anhängen
- g → Hold Space in Pattern Space kopieren
- G → Hold Space an Pattern Space anhängen
- x → Pattern Space und Hold Space tauschen
Reguläre Ausdrücke in Sed
- ^ → Zeilenanfang
- $ → Zeilenende
- . → Beliebiges Zeichen
- * → Null oder mehr Vorkommen
- \+ → Ein oder mehr Vorkommen (mit -r)
- \? → Null oder ein Vorkommen (mit -r)
- [] → Zeichenklasse
- [^] → Negierte Zeichenklasse
- \( \) → Gruppierung
- \1, \2, ... → Backreferences
Spezielle Zeichen
- & → Gesamtes Matching in Replacement
- \n → Neue Zeile
- \t → Tabulator
- \\ → Backslash
Hinweise
- Sed kann einfache Ersetzungen ebenso wie komplexe Muster mit regulären Ausdrücken durchführen.
- Die Reihenfolge der Befehle ist entscheidend, mehrere Befehle können kombiniert werden.
- Pipes ermöglichen die Verarbeitung von Kommandoausgaben direkt durch Sed.
- Für komplexe Transformationen können Sed-Skripte in separaten Dateien gespeichert werden.
- Hold Space ermöglicht mehrzeilige Operationen und komplexe Textmanipulationen.
Fehlerbehandlung
- Syntaxfehler in regulären Ausdrücken führen zu Fehlermeldungen
- Ungültige Zeilenadressen werden ignoriert
- Bei Verwendung von -i ohne Backup sollte vorher gesichert werden
Performance-Hinweise
- Für große Dateien spezifische Adressierung verwenden
- Mehrere Befehle in einem Sed-Aufruf kombinieren
- Komplexe Operationen möglicherweise mit Awk effizienter
Aufgaben
- Prüfen Sie den Inhalt einer Datei mit Sed und geben Sie alle Zeilen aus.
- Testen Sie, wie Sed auf STDIN reagiert, z.B. durch `echo "Text" | sed ...`.
- Experimentieren Sie mit -n und -e Optionen in einer Testdatei.
- Testen Sie verschiedene Adressierungsmethoden (Zeilennummern, Bereiche, Patterns).
- Probieren Sie Hold-Space Operationen mit mehrzeiligen Texten.