在方括号内搜索和替换

时间:2016-06-04 20:45:04

标签: bash sed

我已经浏览了很多线程并尝试了不同的设置来使用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

我需要取消注释该行并将内容更改为方括号。有什么建议,为什么它不起作用?

1 个答案:

答案 0 :(得分:1)

您需要转义模式中的[]以及正则表达式中具有特殊含义的其他字符,在此示例中为.

sed -i 's/#relayhost = \[mailserver\.isp\.tld\]/relayhost = [smtp.mydomain.com]/' /etc/postfix/main.cf. 

作为旁注,我删除了/g标志,你不需要它。

另见this related answer处理模式中转义元字符的问题。