2017-06-05 122 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