我正在尝试替换值中包含“&”的文件中的字符串。
vari = '111|abc & efg|123'
varj = '222|abc & efg|123'
echo $vari | sed -e "s/$vari/$varj/g"
输出是222|abc 111|abc & efg|123 efg|123
我不知道如何处理查找和替换变量中的“&”。有人可以帮忙吗?
答案1
&
in 中的字符在命令$varj
的替换部分中具有特殊含义s/search/replace/
。它的意思是“在此处插入匹配的文本”。
您可以使用\&
“转义”,&
因此它没有特殊含义。您可以使用 sed 修改$varj
以将所有&
字符替换为\&
:
varj=$(echo "$varj" | sed -e 's/\&/\\\&/g')
例如:
cas@ganesh:/tmp$ ksh
$ vari='111|abc & efg|123'
$ varj='222|abc & efg|123'
$ echo "$vari" | sed -e "s/$vari/$varj/g"
222|abc 111|abc & efg|123 efg|123
$ varj=$(echo "$varj" | sed -e 's/\&/\\\&/g')
$ echo "$varj"
222|abc \& efg|123
$ echo "$vari" | sed -e "s/$vari/$varj/g"
222|abc & efg|123
答案2
您需要转义&
替换文本中的字符。这是因为&
是替换文本的特殊字符。所以让你$varj
如下。
varj = '222|abc \& efg|123'
然后您可以sed
按如下方式调用。
echo $vari | sed -e "s/$vari/$varj/g"