使用sed转义字符串变量中的&符号

时间:2017-06-05 17:58:07

标签: bash sed

我正在使用数组变量中的值替换文本SUBJECT,如下所示:

#!/bin/bash

# array of subjects, the ampersand causes a problem.
subjects=("Digital Art" "Digital Photography" "3D Modelling & Animation")

echo $subjects[2] # Subject: 3D Modelling & Animation

sed -i -e "s/SUBJECT/${subjects[2]}/g" test.svg

而不是替换文本SUBJECT,结果文本如下所示:

3D Modelling SUBJECT Animation

如何将&符号作为文字&包含在sed中并使其正确回显?

3 个答案:

答案 0 :(得分:2)

问题是替换文字中是否存在&& sed将完全匹配的文字置于替换状态,因此输出中会显示SUBJECT

你可以使用这个技巧:

sed -i "s/SUBJECT/${subjects[2]//&/\\&}/g" test.svg
在调用${subjects[2]//&/\\&}替换之前,

&\&替换为subjects数组的第二个元素中的sed

答案 1 :(得分:1)

您可以在参数扩展中转义&

sed -i -e "s/SUBJECT/${subjects[2]//&/\\&}/g" test.svg

这将扩展如下:

$ echo "${subjects[2]//&/\\&}"
3D Modelling \& Animation

如果没有&,则没有任何反应。

答案 2 :(得分:0)

sed -i -e "s/SUBJECT/${subjects[2]//&/\\&}/g" test.svg