Shell脚本用另一个变量替换变量有内容&使用sed的字符

时间:2014-09-08 04:42:47

标签: shell sed

以下是示例:

v="1 & 2"

x="3 & 4"

echo $v | sed "s/$v/$x/"

3 1 & 2 4 <------result not replaced by 3 & 4

我想将1 & 2替换为3 & 4,但似乎结果不是我需要的结果。 任何人都可以帮助解决我的问题吗?

2 个答案:

答案 0 :(得分:1)

sed &具有特殊含义。它包含替换部分的整个匹配。当您的替换变量展开时,sed会将其视为3 & 4,其中&包含1 & 2。因此,您在输出中得到3 1 & 2 4

您可以转义&以使其正常工作。

$ v="1 & 2"
$ x="3 \& 4"
$ echo $v | sed "s/$v/$x/"
3 & 4

答案 1 :(得分:0)

替换文字中的&是一个元字符,表示在s///操作的LHS上匹配的内容&#39;。

您需要使用反斜杠转义&

v="1 & 2"
x="3 & 4"
y=$(echo "$x" | sed 's/&/\\\&/g')
echo "$y"
echo "$v" | sed "s/$v/$y/"

输出:

3 \& 4
3 & 4