Sed

Aus xinux.net
Zur Navigation springen Zur Suche springen

Grundlegendes

sed steht für Stream EDitor und ist ein Unix-Werkzeug, mit dem Text-Datenströme bearbeitet werden können. Der Datenstrom kann auch aus einer Datei gelesen werden. Im Gegensatz zu einem Texteditor wird die Ursprungsdatei aber nicht verändert.

Im Gegensatz zu einem interaktiven Texteditor, wie etwa dem vi, wird sed mittels eines Skripts gesteuert.

Der sed-Befehlssatz orientiert sich an jenem des zeilenorientierten Texteditors ed. Dabei werden für die Text-Durchmusterung laut der POSIX-Spezifikation eine bestimmte Abart der Regular Expressions, sogenannte (POSIX-) Basic Regular Expressions (BRE) verwendet.

Arbeitsweise

sed kann sowohl innerhalb einer Pipeline als auch auf Dateien arbeiten. Ausgaben erfolgen grundsätzlich auf <stdout>, Fehlermeldungen auf <stderr>.

Test Datei

  • cat test.dat
Erwin Ruediger 
Karl Erwin
Michael Rudi Erwin Karl Erwin
Tanja Michaela 
Olga Tanja Frieda
Hans Meier
Franz Maier
Otto Mayer
Rudi Meyer

Beispiele

Suchen und ersetzen

Ersetze in jeder Zeile das erste Erwin durch Peter
  • sed "s/Erwin/Peter/" test.dat
Ersetze in jeder Zeile jedes Erwin durch Peter
  • sed "s/Erwin/Peter/g" test.dat
Ersetze in jeder Zeile Erwin am Zeilenanfang durch Peter
  • sed "s/^Erwin/Peter/g" test.dat
Ersetze in jeder Zeile Erwin am Zeilenende durch Peter
  • sed "s/Erwin$/Peter/g" test.dat
Ersetze in von der 2. bis zur 3. Zeile Erwin am Zeilenende durch Peter
  • sed "2,3s/Erwin$/Peter/" test.dat
Ersetze von der Zeile die mit Karl beginnt bis zur Zeile die mit Michael anfängt Erwin durch Peter
  • sed "/^Karl/,/^Michael/s/Erwin/Peter/" test.dat
Ersetze Michael durch Marc nicht Michaela (Wortende)
  • sed "s/Michael\>/Marc/" test.dat
Füge zu Karl -Heinz hinzu
  • sed "s/Karl/&-Heinz/" test.dat
Ersetze alle Schreibweisen von Meier durch Müller
  • sed "s/M[ea][yi]er/Müller/" test.dat
Stelle bei allen Meiervarianten den Nachnamen vor den Vornamen
  • sed "s/^\([A-Z][a-z]\+\) \(M[ea][yi]er\)/\2 \1/" test.dat

Text anhängen, hinzufügen, überschreiben, löschen

Füge nach der 3 Stelle Text ein
  • sed -e "3a\#bla bla bla " test.dat
Hänge nach jeder Zeile mit Erwin Text an
  • sed -e "/Erwin/a\In der Zeile drüber steht Erwin " test.dat
Füge vor jeder Zeile mit Erwin Text hinzu
  • sed -e "/Erwin/i\In der Zeile drunter steht Erwin " test.dat
Zeilen mit Erwin werden überschrieben
  • sed -e "/Erwin/c\Hier ruht Erwin" test.dat
Alle Zeilen mit Erwin löschen
  • sed -e "/Erwin/d" test.dat

Ausgewählte Optionen

-n unterdrückt die Ausgabe und p sorgt dafür das die Zeilen die verändert wurden angezeigt werden
  • sed -n "s/Karl/Charlie/p"
Mehrere Durchgänge
  • sed -e "s/Karl/Charlie/" -e "s/Olga/Svenja/" test.dat
Editierfunktionen in eigene Datei auslagen
  • cat such.conf
s/Karl/Charlie/
s/Olga/Svenja/
  • sed -f such.conf test.dat

Aufgaben

Links