SUCKUP.de

Streameditor – sed

This blog post has been published on 2010-02-14 and may be out of date.

Dies ist kein Texteditor im klassischen Sinne, da dieser die ursprüngliche Datei gar nicht verändert, das Ergebnis der Bearbeitung wird auf der Standardausgabe zur Verfügung gestellt, kann jedoch auch in eine Datei umgeleitet werden.

Aufruf:

… | sed 'sed-Anweisung' | …
… | sed –e 'sed-Anweisung’ –e `sed-Anweisung' | …
… | sed –f 'sed-Anweisungsdatei' | …

Wie diese Anweisungen aufgebaut sind, werde ich nun erklären.

Dabei ist zu beachten, dass sed einige Zeichen als Sonderzeichen ansieht und falls man diese als „normale“ Zeichen verwenden möchte, mittels Backslash („“) auskommentieren muss.

* -> das davor stehende Zeichen kommt nicht oder beliebig oft vor

. -> genau ein beliebiges Zeichen

^ -> am Zeilenanfang

$ -> am Zeilenende

[Zeichenliste] -> genau ein Zeichen, aber nur aus der Liste/Bereich

z.B.:
[0-9] -> 0 1 2 3 4 5 6 7 8 9
[a-c] -> a b c
[A-Z] -> A B C D E F G … u.s.w.
[A-Za-z] -> A a B b C c D d E e F f G g … u.s.w

[^Zeichenliste] -> genau ein Zeichen, aber keines aus der Liste/Bereich

Text ersetzen:

… | sed 's/File/Datei/g' | …

diese Anweisung ersetzt das Wort „File“ durch „Datei“

g -> (Global Flag) ersetzt nicht nur das erste Vorkommen von „File“ in einer Zeile, sondern durchsucht die ganze Zeile

s -> weißt sed an Text zu ersetzten, man könnte dies als Funktion von sed ansehen

Falls man dies jedoch nicht auf die komplette Datei anwenden möchte, kann man sed Anweisen, dies nur auf einen bestimmten Bereich anzuwenden.

… | sed –n '1,$p' | …

gibt alles von der ersten bis zur letzten Zeile aus

… | sed –n  '1,5!p' | …

gibt alles außer die ersten fünf Zeilen aus

n -> Pufferinhalt vom Arbeitsspeicher wird nicht mit ausgegeben, also nur der verarbeitete Teil wird dargestellt

$ -> letzte Zeile

! -> negiert die Ausgabe

Kommen wir zum ersten praktischen Beispiel.

cat /etc/passwd | sed  –n '/bash$/p'

gibt nur die Zeilen aus der angegebenen Datei aus, welche als Start-Shell die bash eingetragen haben