====== 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