Hallo, Am Thu, 09 Oct 2003, Axel Heinrici schrieb:
Ich bin mal wieder auf ein Problem mit sed gestoßen. Ich dachte schon ich hätte die Art und Weise wie was an welcher Stelle expandiert/interpretiert wird verstanden. Ich möchte in einem file ' durch \' ersetzen. So Sachen wie sed 's/\'/\\\'/' gehen aber iregndwie überhaupt nicht. Weiß einer rat.
$ set -x $ echo "a'b'c" | sed "s/'/\\\'/g" + echo 'a'\''b'\''c' + sed 's/'\''/\\'\''/g' a\'b\'c $ echo "a'b'c" | sed 's/'\''/\\'\''/g' + echo 'a'\''b'\''c' + sed 's/'\''/\\'\''/g' a\'b\'c $ echo "a'b'c" | sed 's/'"'"'/\\'"'"'/g' + echo 'a'\''b'\''c' + sed 's/'\''/\\'\''/g' a\'b\'c $ set +x Das Interessante ist dabei, dass sed in beiden Faellen das gleiche zu sehen bekommt :) Der 3-fach "\" in der Ersetzung der ersten Variante ist noetig, weil die shell in den "" schon einen Backslash wegnimmt... Achso: mit awk und perl bekommst man's auch nicht "schoener" hin. $ echo "a'b'c" | awk "{gsub(\"'\", \"\\\'\"); print;}" $ echo "a'b'c" | perl -pe "s/'/\\\'/g;" Aber vielleicht verraetst du uns ja noch, wozu und in welchem Zusammenhang du das ganze ueberhaupt brauchst, vielleicht laesst sich das Problem sowieso eleganter loesen (z.B. dadurch, dass du im shell-script anstaendig quotest *scnr*). -dnh PS: "der Trick" der letzteren beiden Varianten, ist, die '' Umgebung des sed-Argumentes aufzuheben, das ' (als \' in der zweiten, oder als "'" in der dritten Variante vor der shell maskiert) einzugeben und dann die '' Umgebung fuer's sed-Argument fortzusetzen. -- Einst gab Gott den Menschen 11 Gebote, leider ist beim zweiten Stein ein Stück abgebrochen, so dass nur noch 10 überliefert sind. Das elfte lautet: "Du sollst nicht als root arbeiten, schon gar nicht in einer grafischen Oberfläche!". -- Manfred Tremmel in suse-linux