2014-02-26 60 views
0

我正在使用shell腳本。我的要求是找到並替換字符串。該字符串也包含「/」字符。我得到錯誤sed:-e表達式#1,字符18:未終止的's'命令。有人可以告訴我應該如何替換具有「/」的字符串?使用sed查找並替換字符串給出錯誤

#!/bin/bash 
... 
search_string="../conf/TestSystem/Inst1.xml" 
rep="Inst1/Instrument.xml" 

sed -i 's|${line}|${rep}/g' MasterConfiguration.xml 

我試着用另一sed命令,但一個也給了錯誤的sed:-e表達式#1,焦炭13:未知的選項爲'S'

sed -e "s/${line}/${rep}/g" MasterConfiguration.xml > tempfile 
+0

雙引號爲您的sed動作部分,而不是單引號如果你想要替換變量內容,最後的'/ g'應該是'| g'因爲你開始你的's'動作wiuth' |'而不是'/'。在這種情況下,搜索字符串也必須理想地轉義點字符。 – NeronLeVelu

回答

0

你可以試試這個sed

sed -i "s#${line}#${rep}#g" MasterConfiguration.xml 

問題:

相反你有,

sed -i "s|${line}|${rep}/g" MasterConfiguration.xml 

它應該是,

sed -i "s|${line}|${rep}|g" MasterConfiguration.xml 

語法:

sed "s|pattern|replacement|g" 
0

每當你處理外殼變量,你必須讓他們走出「sed-字符串「:

例如:

sed -e "s/"${line}"/"${rep}"/g" MasterConfiguration.xml > tempfile 

否則的sed將把字符原樣和搜索${line}字面上: enter image description here
正如你看到的,什麼也沒有發生在這裏。

此外,如果您的變量包含/您需要爲sed使用另一個分隔符。我傾向於在這種情況下使用~,但你可以自由地使用其它字符 - 只是隨之而來的,並喜歡在你的第一個例子,sed的命令不要混合使用它們:

sed 's~'${line}'~'${rep}'/g' //WRONG 
sed 's~'${line}'~'${rep}'~g' //RIGHT 

結合兩者,它將工作: enter image description here