以下是示例:
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
,但似乎结果不是我需要的结果。
任何人都可以帮助解决我的问题吗?
答案 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