Sed Grundlagen: Unterschied zwischen den Versionen

Aus Xinux Wiki
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] '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 (in-place)
+
* -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.