带有sed shell脚本的正则表达式

时间:2015-05-27 17:12:17

标签: regex shell sed

当我尝试使用sed在文档中对正则行进行正则表达式时,我遇到了问题。 这是我想要的正则表达式:

  

proxy_pass http:\\ 193.168.19.35 /;

我想获得以下结果:

  

proxy_pass http:\\ 193.168.19.32 /;

这就是我的尝试:

sed -r 's/^proxy_pass htpp\:\/\/[[:digit:]]+.*\/;/proxy_pass htpp\:\/\/192.168.81.29\/;/' /etc/nginx/nginx.conf > /etc/nginx/nginx.conf.temp

你们能在这帮助我吗?

1 个答案:

答案 0 :(得分:2)

如果您的网址为\\,则需要在正则表达式中添加对此模式的支持。我相信你在问题中拼错了一些字。

因此,如果您想匹配proxy_pass http:\\193.168.19.32/;,请使用

sed -r 's/^proxy_pass http\:\\\\[[:digit:]]+(\.[[:digit:]]+)*\/;/proxy_pass htpp\:\/\/192.168.81.29\/;/' /etc/nginx/nginx.conf > /etc/nginx/nginx.conf.temp
                            ^^^^            |---------------|

如果您要替换proxy_pass http://193.168.19.32/;,请使用

sed -r 's/^proxy_pass http\:\/\/[[:digit:]]+(\.[[:digit:]]+)*\/;/proxy_pass htpp\:\/\/192.168.81.29\/;/' /etc/nginx/nginx.conf > /etc/nginx/nginx.conf.temp
                            ^  ^            |---------------|

注意模式中的(\.[[:digit:]]+)*,它可以匹配IP地址的所有4个部分。