我基本上尝试修改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做同样的事?
此致 阿南德。
答案 0 :(得分:2)
问题是shell变量没有引用。尝试:
sed -i -e "s/$currlistener/$newlistener/g" server.xml
sed解决方案要求您信任shell变量的来源。对于这样的情况,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"'
如果要在子进程中使用它们,则只需要导出它们。