1

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

4

2 回答 2

1

不要假设任何两个工具都使用相同的正则表达式语法。如果您要使用 进行替换sed,请使用sedto test-not egrepsed它就像一个grep命令 一样易于使用: sed -ne '/pattern/p'.

于 2013-02-11T01:32:47.363 回答
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

于 2013-02-11T01:05:33.067 回答