sed搜索替换问题

sed搜索替换问题

我正在尝试替换值中包含“&”的文件中的字符串。

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"

相关内容