====== 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" ; cat
^ 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" ; cat
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///;s///'
===== 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!!!g' {} \;
===== Kommentieren =====
* Auskommentieren: Suchbegriff suchen und diesen sowie 2 folgende Zeilen auskommentieren \\ sed -i~ -r '/^#?/,+2 s/^/#/'
* Einkkommentieren: Suchbegriff suchen und diesen sowie 2 folgende Zeilen auskommentieren \\ sed -i~ -r '/^#?/,+2 s/^#+//'
===== Einfügen =====
* vor dem Suchtext \\ sed -i -r '/^/ i '
* nach dem Suchtext \\ sed -i -r '/^/ a '
===== 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