Sed Grundlagen: Unterschied zwischen den Versionen
Zur Navigation springen
Zur Suche springen
(Die Seite wurde neu angelegt: „= Sed – Grundlagen = * Sed (Stream Editor) ist ein mächtiges Kommandozeilenwerkzeug zur Bearbeitung von Textdateien. * Es arbeitet zeilenweise und kann Tex…“) |
|||
| Zeile 9: | Zeile 9: | ||
* Befehle werden sequentiell auf jede Zeile angewendet. | * Befehle werden sequentiell auf jede Zeile angewendet. | ||
* Die Standardausgabe ist STDOUT, die Datei selbst bleibt unverändert, sofern nicht -i verwendet wird. | * 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 == | == Syntax == | ||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
| − | + | sed [OPTIONEN] 'BEFEHL' datei | |
| + | sed [OPTIONEN] -e 'BEFEHL1' -e 'BEFEHL2' datei | ||
| + | sed [OPTIONEN] -f skript.sed datei | ||
</syntaxhighlight> | </syntaxhighlight> | ||
| + | |||
| + | == 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 == | == Wichtige Optionen == | ||
* -n → Unterdrückt die automatische Ausgabe aller Zeilen (nützlich mit p) | * -n → Unterdrückt die automatische Ausgabe aller Zeilen (nützlich mit p) | ||
| − | * -i → Bearbeitet die Datei direkt ( | + | * -i[SUFFIX] → Bearbeitet die Datei direkt (mit optionalem Backup) |
* -e → Ermöglicht die Angabe mehrerer Sed-Befehle | * -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 == | == Hinweise == | ||
| Zeile 24: | Zeile 89: | ||
* Die Reihenfolge der Befehle ist entscheidend, mehrere Befehle können kombiniert werden. | * Die Reihenfolge der Befehle ist entscheidend, mehrere Befehle können kombiniert werden. | ||
* Pipes ermöglichen die Verarbeitung von Kommandoausgaben direkt durch Sed. | * 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 == | == Aufgaben == | ||
| Zeile 29: | Zeile 106: | ||
* Testen Sie, wie Sed auf STDIN reagiert, z.B. durch `echo "Text" | sed ...`. | * Testen Sie, wie Sed auf STDIN reagiert, z.B. durch `echo "Text" | sed ...`. | ||
* Experimentieren Sie mit -n und -e Optionen in einer Testdatei. | * 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. | ||
Aktuelle Version vom 18. Oktober 2025, 08:41 Uhr
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.