Sed
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