1

请看这些简单的命令:

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

\U吃掉了。其他反斜杠也不会存在。

如何使上述命令按预期工作?

4

2 回答 2

3

如果它只是被 sed “吃掉”并转义的反斜杠就足够了,那么请尝试:

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

对你来说足够困惑吗?\\表示单个 \ 因为它也需要在 shell 中转义。inital//类似于 中的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[_
于 2011-09-22T09:24:53.713 回答
1

您可以通过 sed 重新解析 $tmp 本身

echo "a" | sed "s|a|$(echo ${tmp} | sed 's|\\|\\\\|g')|g"
于 2011-09-22T09:24:25.337 回答