SED命令匹配正则表达式但不替代

时间:2013-02-11 00:38:28

标签: regex sed grep

我正在构建一个.sed文件,以开始编写多个apache服务器的设置脚本。我正在尝试使用sed来匹配.conf文件中的默认网站管理员电子邮件地址,这对于这个egrep很有用。然而,当我使用sed尝试,所以替代搜索和替换我没有得到任何错误,但它也没有做任何替代。我通过再次运行相同的egrep命令来测试它。

egrep -o '\b[A-Za-z0-9._%-]+@[A-Za-z0-9.-]+(\.[A-Za-z]{2,4})?\b' /home/test/httpd.conf

返回

admin@your-domain.com
root@localhost
webmaster@dummy-host.example.com

我正在尝试使用的sed命令是

sed -i '/ServerAdmin/ s/\b[A-Za-z0-9._%-]+@[A-Za-z0-9.-]+(\.[A-Za-z]{2,4})?\b/MY_ADMIN_ADDRESS@gmail.com/g' /home/test/httpd.conf

运行后,我尝试通过再次运行egrep验证结果,并返回相同的3个电子邮件地址,表示没有更换任何内容。

2 个答案:

答案 0 :(得分:1)

不要假设任何两个工具使用相同的正则表达式语法。如果您要使用sed进行替换,请使用sed进行测试,而不是egrep。它很容易使用sed,就像它是grep命令一样:sed -ne '/pattern/p'

答案 1 :(得分:0)

必须告诉sed需要使用-r选项使用扩展正则表达式,然后按如下方式生成sed命令。

sed -ir '/ServerAdmin/ s/\b[A-Za-z0-9._%-]+@[A-Za-z0-9.-]+(\.[A-Za-z]{2,4})?\b/MY_ADMIN_ADDRESS@gmail.com/g' /home/test/httpd.conf

非常感谢Kent指出它遗失的地址不是ServerName