Inhaltsverzeichnis

Sed

Mit dem Programm sed lässt sich Text manipulieren.
Hier einige Beispiel Skripssnipsel.

Ausgabe suchen und ersetzen

Wenn man eine Variable übergeben möchte z.B. mit read dann muss der Anweisungsstring für sed in doppelten Anführungszeichen angegeben werden. Auch regular expressions funktionieren im Anweisungsstring

read -p "servername angeben: " svr; sed "s/^$svr|[0-9]\+/$svr|1/g" <DATEINAME>; cat <DATEINAME>
regexp Bedeutung
^ suche am Zeilenanfang
[0-9] suche nach einer Ziffer 0-9
\+ suche nach einer Zahl, die aus einer oder mehreren o.g. Ziffern bestehen kann

In diesem Beispiel legt man sich eine Testdatei wie folgt an:

servername1|0
servername2|3
servername6|11
...

Der o.g. sed-String würde nach einem Servernamen fragen und dann die Zahl hinter dem „|“ durch eine „1“ ersetzen.

Dateiinhalt suchen und ersetzen

Wenn der Inhalt einer Datei, mit Sed, direkt geändert werden soll, muss dem Sed-String noch der Parameter -i hinzugefügt werden.
Hier anhand des Beispiels von oben:

... sed -i "s/^$svr|[0-9]\+/$svr|1/g" <DATEINAME>; cat <DATEINAME>

Ersetze „was“ mit „etwas“ NUR in Zeilen die „wo“ enthalten

sed '/wo/s/etwas/et#was/g'

Ersetze „foo“ mit „bar“ AUSSER in Zeilen die „baz“ enthalten

sed '/wo/!s/etwas/et#was/g'

Mehrfache Suchausdrücke in einem Befehl

sed 's/<SUCHBEGRIFF>//;s/<SUCHBEGRIFF>//'

Rekursiv suchen und ersetzen

Mit find lassen sich verschiedene Suchergebnisse erzielen z.B. suchen nach allen Dateien in einer Ordnerstruktur. Die Suchergebnisse lassen sich dann mit dem Parameter -exec weiterverarbeiten.

find . -type f -exec sed -ie 's!<SUCHSTRING>!<SUCHSTRING>!g' {} \;

Kommentieren

Einfügen

Zahlen mit Komma versehen

Hiermit wird am Beispiel: „bla test 20130607215015 some text“ die Zahl von hinten, an jeder 3. Stelle, mit einem Komma versehen.

 echo "bla test 20130607215015 some text" | sed ':a;s/\B[0-9]\{3\}\>/,&/;ta'

Das Ergebnis sieht dann so aus:

bla test 20,130,607,215,015 some text

Möchte man hingegen nur ein Komma setzen, kann dies wie folgt ausgeführt werden.

echo 2346455736745 | sed 's/\B[0-9]\{3\}\>/,&/'

Ergebnis aus „asdftt 2346455736745 asdfgg 34567889“

asdftt 2346455736,745 asdfgg 34567889

Wenn man alles Zahlen finden und ersetzen möchte, fügt man dem sed Befehl noch ein „g“ hinzu.

echo 2346455736745 | sed 's/\B[0-9]\{3\}\>/,&/g'

Ergebnis aus „asdftt 2346455736745 asdfgg 34567889“

asdftt 2346455736,745 asdfgg 34567,889