我已经浏览了很多线程并尝试了不同的设置来使用Sed和AWK执行搜索和替换,但是,我并没有那么成功。
我需要将#relayhost = [mailserver.isp.tld]
替换为relayhost = [smtp.mydomain.com]
。
我在下面使用了两个命令,但两者都没有提供所需的结果。
sed -i 's/#relayhost = [mailserver.isp.tld]/relayhost = [smtp.mydomain.com]/g' /etc/postfix/main.cf.
也试过
sed -e '0,/#relayhost = [mailserver.isp.tld]/{//i\[smtp.mydomain.com]' -e '}' /etc/postfix/main.cf
我需要取消注释该行并将内容更改为方括号。有什么建议,为什么它不起作用?
答案 0 :(得分:1)
您需要转义模式中的[]
以及正则表达式中具有特殊含义的其他字符,在此示例中为.
:
sed -i 's/#relayhost = \[mailserver\.isp\.tld\]/relayhost = [smtp.mydomain.com]/' /etc/postfix/main.cf.
作为旁注,我删除了/g
标志,你不需要它。
另见this related answer处理模式中转义元字符的问题。