Das UNIX-Kommando sed ("stream editor") ist ein Filter und dient dazu, einfache Editieroperationen auf Datenströmen auszuführen. Auf GNU Systemen wird logischerweise GNU sed verwendet, das gegenüber dem originalen Unix sed einige Erweiterungen erfahren hat.

Beispiel:

sed 's/falsch/richtig/g' < falsch.txt > richtig.txt

ersetzt "falsch" durch "richtig" im Text

sed -n 's/MemTotal: \+\([0-9]\+\) kB/1円/p' </proc/meminfo

bestimmt die Gesamtspeicher-Menge des Kernels (2.5) in kB.

sed '/pattern/p;d'

kann wie grep verwendet werden.

echo 'such die nadel im heuhaufen' | sed -n 's/.*\(nadel.*haufen\).*/1円/p'

Gibt nur die Treffer aus anstatt der kompletten Zeile

Tipps

  • Für Konvertierung von Zeichensätzen, Umlauten und Zeilenenden ist recode besser geeignet.

  • Probleme, die dazu neigen, komplizierter zu werden (die also über eine einfache Ersetzung hinausgehen) verlangen irgendwann nach einem leistungsfähigeren Tool als sed. Genau aus diesem Grund wurde seinerzeit Perl entwickelt. Die RegularExpressions-Syntax ist mächtiger und insbesondere gibt es die Kommandozeilenoptionen -p, -n, -i und -e, die man sich ansehen sollte. So kann man obiges Beispiel auch als

    perl -pe 's/falsch/richtig/g' falsch.txt > richtig.txt

    schreiben. Wer also tiefer in die sed-Magie einsteigen will, sollte besser gleich zu ["Perl"] greifen. -- ThomasBayen

Frage: Wie kann ich aus einer Datei mit mehreren Webadressen nur die Adressen (zwischen href=" und ") herausfiltern?

  • Hmm.. das wuerd ich mit Perl machen:

    perl -nle 'print 1ドル while(/href="([^"]*)"/ig)' < adressen.html

Und das gleiche nochmal für E-Mailadressen, weil ichs grad gebraucht hab. Die E-Mailadressen sind in Anführungszeichen eingeschlossen:

perl -nle 'print 1ドル while(/.*\"([A-Za-z.]+@[A-Za-z.]+)\".*/ig)' * 2> /dev/null > mailadressen.txt

sed (zuletzt geändert am 2007年12月23日 22:47:51 durch localhost)

AltStyle によって変換されたページ (->オリジナル) /