hae*_*lix 4 linux variables bash escaping sed
我怎样才能解决这个问题:
abc="a/b/c"; echo porc | sed -r "s/^/$abc/"
sed: -e expression #1, char 7: unknown option to `s'
Run Code Online (Sandbox Code Playgroud)
变量的替换$abc正确完成,但问题是$abc包含斜杠,这会混淆sed.我可以以某种方式逃脱这些斜线吗?
请注意,sed(1)允许您为s///分隔符使用不同的字符:
$ abc="a/b/c"
$ echo porc | sed -r "s|^|$abc|"
a/b/cporc
$
Run Code Online (Sandbox Code Playgroud)
当然,如果你走这条路线,你需要确保你选择的分隔符不会在输入的其他地方使用.
的GNU手册sed指出"所述/字符可以由任何给定的S指令内的任何其它单个字符被均匀地取代."
因此,只需使用另一个字符代替/,例如::
abc="a/b/c"; echo porc | sed -r "s:^:$abc:"
Run Code Online (Sandbox Code Playgroud)
不要使用可在输入中找到的字符.我们可以使用:上面的,因为我们知道input(a/b/c/)不包含:.
小心角色逃避.
如果使用"",Bash将特别解释一些字符,例如`(用于内联执行),!(用于访问Bash历史记录),$(用于访问变量).
如果使用'',Bash将按字面意思取得所有字符$.
这两种方法可以结合使用,具体取决于您是否需要转义,例如:
abc="a/b/c"; echo porc | sed 's!^!'"$abc"'!'
Run Code Online (Sandbox Code Playgroud)