Hi On Thursday 09 October 2003 13:01, David Haller wrote:
$ 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 :)
Äähm... Was für zwei Fälle? Ich habe schon einen Verdacht was du meinst und ich bedanke mich schonmal für die Mühe, aber mein Hirn ist nicht in der Lage obige Zeilen in eindeutigen Zusammenhang mit _zwei Fällen_ zu bringen, sorry. Immerhin habe ich jetzt schonmal was über "set" gelernt (und die mail von Andreas wird auch etwas klarer). Es funktioniert jetzt auch und ich glaube die sed-Aufrufe verstanden zu haben.
Der 3-fach "\" in der Ersetzung der ersten Variante ist noetig, weil die shell in den "" schon einen Backslash wegnimmt...
Den hatte ich sogar ganz zu Anfang, nur waren die Anführungszeichen bei mir falsch.
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;"
Von der Lesbarkeit kommt mir das alles relativ krank vor.
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*).
Obige Lösungen sind schon eine sehr gut. Der Hintergrund ist folgender. Ich möchte ein iso-image von Dateien mit kranken Namen erzeugen (siehe mail bezüglich der -graft-points option). Dazu habe ich erstmal die Ausgabe von ls in ein skript kopiert und den Zielpfad diesen Zeilen vorangestellt. Die filenamen in diesem Skript sollen erstmal so escapet (dritte Person singular von "escapen") werden, dass das der mkisofs-Aufruf grundsätzlich funktioiert. Der Umweg über das Skript dient dazu noch Änderungen an den Zielnamen oder Pfaden vornehmen zu können. Und das ' ist eines der häufigsten und zusätzlich noch das widerspenstigste Zeichen in den Dateinamen.
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.
Da muss man erstmal drauf kommen. mfg Axel