繁体   English   中英

使用sed将字符串替换为特殊字符

[英]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

问题是外壳变量未加引号。 尝试:

sed -i -e "s/$currlistener/$newlistener/g" server.xml

使用awk

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM