如何处理sed中使用的反斜杠

时间:2011-09-22 09:10:20

标签: bash sed escaping backslash

请看这些简单的命令:

$ echo $tmp
UY\U[_
$ echo "a" | sed "s|a|${tmp}|g"
UY[_

见? “\ U”被吃掉了。其他反斜杠也不会生存。

问题是,如何使上述命令按预期工作?

请注意代码不是真正的解决方案;我只是简单地解释一下。 我必须使用变量,变量肯定有反斜杠。

请评论。谢谢!

XM

2 个答案:

答案 0 :(得分:3)

如果它只是被sed“吃掉”并且逃避的反斜杠就足够了,那么试试吧:

echo "a" | sed "s|a|${tmp//\\/\\\\}|g"

对你来说足够困惑? \\代表单个\,因为它也需要在shell中进行转义。 初始//类似于g中的s/foo/bar/g修饰符,如果您只想替换第一个出现的模式,请跳过它。

有关${parameter/pattern/string}的文档,请访问:http://www.gnu.org/s/bash/manual/bash.html#Shell-Parameter-Expansion

编辑:根据您的目标,您可能最好不要将sed用于此目的。

$ tmp="UY\U[_"
$ in="a"
$ echo ${in//a/$tmp}
UY\U[_

答案 1 :(得分:1)

您可以通过sed

重新分配$ tmp
echo "a" | sed "s|a|$(echo ${tmp} | sed 's|\\|\\\\|g')|g"