出于某种原因,我需要在某些字符串
中转义正斜杠# echo "http://google.com" | sed -e 's/[/]/\\\//g'
http:\/\/google.com
但是当我尝试执行相同的内部``它告诉我:
# somevar=`echo "http://google.com" | sed -e 's/[/]/\\\//g'`
sed: -e expression #1, char 10: unknown option to `s'
我的sed版本:
# rpm -q sed
sed-4.1.5-8.el5
答案 0 :(得分:1)
这是因为在解析命令之前,反引号内部(又名反引号,严重重音),\\
将替换为\
。
来自bash手册页:
当使用旧式反引号形式的替换时,反斜杠保留其字面含义,除非后跟$,`或 \。没有反斜杠的第一个反引号终止了 命令子 stitution。使用$(命令)表单时,括号之间的所有字符组成命令;没有人接受治疗 特别
只需使用$(...)
代替反引号,除非您确实需要预置sh
兼容性
somevar=$(echo "http://google.com" | sed -e 's/[/]/\\\//g')
我还建议使用除/
之外的正则表达式分隔符,以便更轻松,例如。
somevar=$(echo "http://google.com" | sed -e 's|/|\\/|g')
答案 1 :(得分:0)
使用不同的分隔符,你会没事的。我不能告诉你为什么它可以从命令行运行,但只需修复它就可以在任何地方工作。
somevar=`echo "http://google.com" | sed -e 's%[/]%\\/%g'`
答案 2 :(得分:0)
你必须再次逃避字符串。
$ echo `echo \x` # tilde is executing "echo x"
x
$ echo `echo \\x` # tilde is executing "echo \x"
x
$ echo `echo \\\x` # tilde is executing "echo \\x"
\x
在你的情况下,你应该添加2个额外的斜杠
$ echo `echo "http://google.com" | sed -e 's/[/]/\\\\\//g'`
http:\/\/google.com