Streameditor – sed

closeDieser Beitrag wurde vor mehr als drei Monaten veröffentlicht. Bedenke bitte, dass die hier angebotene Information nicht mehr aktuell und gültig sein könnte. Informiere dich daher bitte auch an anderer Stelle über dieses Thema. Sollten sich neue Informationen ergeben haben, so kannst du mich auch gerne auf diese über einen Kommentar hinweisen. Vielen Dank!

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

  • http://suckup.de/ Lars Moelleken

    hier noch ein Beispiel: dies löscht einen bestimmten Bereich (Textstelle) z.B. in einem xml-Dokument … ;)

    cat /data/system/packages.xml | sed ‘//,//s/.*//’

  • http://suckup.de/ Lars Moelleken

    hier gibt es weitere Infos:
    – http://wiki.ubuntuusers.de/sed
    – http://www.tty1.net/sed-tutorium/sed-tutorium.html
    – http://linux.die.net/man/1/sed