[英]using sed to replace string with special characters
我基本上是想修改tomcat server.xml连接器标记,并为其添加地址属性。
我想在server.xml中找到以下字符串
我正在用sed做下面的事情,
export currlistener=\<Connector\ port\=\"18443\"
export newlistener=\<Connector\ port\=\"18443\"\ address\=\"127.0.0.1\"\
echo $currlistener
echo $newlistener
sed -i -e 's/'$currlistener'/'$newlistener'/g' server.xml
但是我得到了错误
sed: -e expression #1, char 12: unterminated `s' command
我猜sed正在解释特殊字符并出错。
我将如何使用awk做同样的事情?
问候,阿南德。
问题是外壳变量未加引号。 尝试:
sed -i -e "s/$currlistener/$newlistener/g" server.xml
sed解决方案要求您信任外壳变量的来源。 对于这种情况,awk更安全。 使用现代的GNU awk:
awk -i inplace -v a="$currlistener" -v b="$newlistener" '{gsub(a, b)} 1' server.xml
或者,使用其他awk:
awk -v a="$currlistener" -v b="$newlistener" '{gsub(a, b)} 1' server.xml >tmp && mv tmp server.sml
另外,无需太多转义即可定义shell变量:
currlistener='<Connector port="18443"'
newlistener='<Connector port="18443" address="127.0.0.1"'
仅当要在子进程中使用它们时才需要导出它们。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.