2017-06-05 69 views
2

我正在与一个值替换文本SUBJECT从数组变量是这样的:逃逸符号使用的sed

#!/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中包含&符号&,并让它正确回显?

回答

1

问题是您的替换文本中存在&&使sed位置完全匹配文本,因此SUBJECT出现在输出中。

可以使用该特技:

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

${subjects[2]//&/\\&}调用sed取代前取代每个&\&subjects阵列的第二元件。

+1

谢谢!对于.svg文件,需要将其替换为&,这样才能正常工作:“//&/ \\ &” – 43Tesseracts

1

可以逃避在参数扩展&

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

这将扩大如下:

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

,如果没有&,什么都不会发生。

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