我正在使用shell脚本。我的要求是找到并替换字符串。该字符串也包含“/”char。我收到错误sed:-e expression#1,char 18:unterminated`s'命令。有人可以告诉我应该如何替换具有“/”的字符串?
#!/bin/bash
...
search_string="../conf/TestSystem/Inst1.xml"
rep="Inst1/Instrument.xml"
sed -i 's|${line}|${rep}/g' MasterConfiguration.xml
我尝试使用另一个sed命令但是那个也给出了错误sed:-e expression#1,char 13:`s'的未知选项
sed -e "s/${line}/${rep}/g" MasterConfiguration.xml > tempfile
答案 0 :(得分:1)
每当你处理shell变量时,你必须将它们从“sed-string”中取出:
例如:
sed -e "s/"${line}"/"${rep}"/g" MasterConfiguration.xml > tempfile
否则sed会按原样处理字符并按字面搜索${line}
:
如你所见,这里没有任何事情发生。
此外,如果您的变量包含/
,则需要为sed使用另一个分隔符。在这种情况下,我倾向于使用~
,但你可以自由地使用其他字符 - 只是结果并且不要像你的第一个示例-sed-command那样混合它们:
sed 's~'${line}'~'${rep}'/g' //WRONG
sed 's~'${line}'~'${rep}'~g' //RIGHT
结合两者并且它将起作用:
答案 1 :(得分: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"