Suchen und Ersetzen mit sed nach einer Pipe

Mr. Brooks

Lt. Commander
Registriert
Aug. 2011
Beiträge
1.441
Hallo,

angenommen ein Script schreibt mir den String

Code:
1)
2)

in eine Variable. Wenn ich da am Ende ein

Code:
| sed 's/1/2/g'

einfüge bekomme ich

Code:
2)
2)

Das geht aber nicht mit den Klammern. Wenn ich

Code:
sed 's/")"/":"/g'

einfüge passiert schlicht nichts. Auch das maskieren der Klammer mit \ geht nicht.
 
Code:
echo '
1)
2)' | sed 's/)/:/g'
geht bei mir
Code:
1:
2:

Code:
~$ sed --version
sed (GNU sed) 4.4
 
Komisch, jetzt geht es genau so. Ich muss nur die Klammer maskieren, da das ganze in einem $(... | sed ...) steckt. Eine Erweiteurng des ganzen wäre nun, dass als Replace der Doppelpunkt plus der Inhalt einer Variable eingefügt wird. Mit

Code:
sed s/\)/:$i/g

geht es nicht, da kommt

Code:
sed: -e Ausdruck #1, Zeichen 9: Unbekannte Option für »s«

Wenn ich Single-Quotes verwende kommt

Code:
sed 's/)/:$i/g'
1:$i
2:$i

Es soll ja aber die Variable aufgelöst werden.
 
Mit double quotes sollte es gehen! Probiere einen anderen Separator. Wenn du zum Beispiel Pfade in der Variable hast, dann würde das ein Problem geben, weil sed die Schrägstriche verarbeiten will. Probier mal
sed "s_)_:$i_g" oder anstatt _ mit |
 
Geht auch mit double quotes nicht. Das mit den / sollte erstmal kein Problem sein, da er ja die Variable nicht auflöst, also keine / zu sehen sind. Geht aber auch mit _ oder | nicht.
 
Mr. Brooks schrieb:
Komisch, jetzt geht es genau so. Ich muss nur die Klammer maskieren, da das ganze in einem $(... | sed ...) steckt. Eine Erweiteurng des ganzen wäre nun, dass als Replace der Doppelpunkt plus der Inhalt einer Variable eingefügt wird. Mit

Code:
sed s/\)/:$i/g

geht es nicht, da kommt

Code:
sed: -e Ausdruck #1, Zeichen 9: Unbekannte Option für »s«

Wenn ich Single-Quotes verwende kommt

Code:
sed 's/)/:$i/g'
1:$i
2:$i

Es soll ja aber die Variable aufgelöst werden.
Verstehe ich es richtig, dass eine Shell-Variable aufgelöst werden soll?
 
Zurück
Oben