Sed Grundlagen

Aus Xinux Wiki
Version vom 18. Oktober 2025, 08:41 Uhr von Thomas.will (Diskussion | Beiträge)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
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.