我正在构建一个.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个电子邮件地址,表示没有更换任何内容。
答案 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