PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Problem mit sed und Slash



atomic
23.09.02, 09:28
Ich möchte in einer datei einen Eintrag ändern, deshalb verwende ich sed.
Allerdings gibt es ein Problem wenn in dem Eintrag den ich ändern möchte ein "/" vorkommt.

Wenn ich diesen Eintrag ändern will werden der "/" falsch erkannt. Der sed Befehl sieht bisher so aus:

sed -e s/'mv foo/bar.conf /etc/bar.conf'/'cp foo/bar /etc/bar.conf'/ /root/test > /root/test2

Kann mir dabei jemand helfen ?

Danke im Vorraus

zander
23.09.02, 09:37
Benutze bei den Dateinamen für die '/' Zeichen jeweils "\/"; das '\' ist ein sogenanntes escape Zeichen, das '/' seine besondere Bedeutung nimmt.

atomic
23.09.02, 09:52
ok, allerdings funktioniert es bei diesem, etwas komplexeren String nicht so richtig:

sed -e s/'# LoadModule foo_module modules\/mod_foo.so'/'LoadModule php4_module libexec\/libphp4.so'/ /etc/httpd/conf/conf/httpd.conf.tmp > /etc/httpd/conf/httpd.conf.tmp2

irgendeine Idee ?

namina
23.09.02, 10:10
Versuchs mal so:

sed -e s/'# LoadModule foo_module modules\/mod_foo.so'/'LoadModule php4_module libexec\/libphp4.so'/'[g]'/ /etc/httpd/conf/conf/httpd.conf.tmp > /etc/httpd/conf/httpd.conf.tmp2

Wenns so auch nicht geht, setz vor das # einen \

atomic
23.09.02, 10:22
Der Fehler liegt ganz klar an den "/", ohne Slash funktioniert es wunderbar :(

zander
23.09.02, 10:25
sed -e "s/mv foo\/bar.conf \/etc\/bar.conf/cp foo\/bar \/etc\/bar.conf/" /root/test > /root/test2

oder, alternativ (falls dir die ganzen escapes nicht zusagen):

sed -e "s|mv foo/bar.conf /etc/bar.conf|cp foo/bar /etc/bar.conf|" /root/test > /root/test2

atomic
23.09.02, 10:50
OK, danke fuer eure Hilfe

zander
23.09.02, 10:51
Bitteschön.