繁体   English   中英

SED替换匹配行,但如果被注释掉则不行

[英]SED Replace Matching Line but not if it's commented out

我的文字包含这样的一行:

DHCPD_INTERFACE="eth4"

其他行包含#DHCPD_INTERFACE=

我想替换与DHCPD_INTERFACE="eth4"匹配的整行DHCPD_INTERFACE="eth4" ,但如果行包含#DHCPD_INTERFACE=希望替换

我试过了: sed -i.bak '/^#/!s/DHCPD_INTERFACE=/DHCPD_INTERFACE="eth2"/g' dhcpd

但这并不能取代整条生产线。

DHCPD_INTERFACE="eth4"应该更新为DHCPD_INTERFACE="eth2"但不应更改包含#DHCPD_INTERFACE=行。

我怎样才能做到这一点.. ? 谢谢

您可以使用anchor( ^ )来匹配行的开头:

sed 's/^\(DHCPD_INTERFACE="eth\)4"/\12"/' file

您可以先将行替换为“#”,然后将行替换为“ eth4”,最后再将其替换为“#”。

    sed -i.bak s/#DHCPD_INTERFACE=/foo/g dhcpd
    sed -i s/DHCPD_INTERFACE="eth4"/DHCPD_INTERFACE="eth2"/g dhcpd
    sed -i s/foo/#DHCPD_INTERFACE=/g dhcpd

不是最佳解决方案,但仍然是可行的解决方案。 希望我有所帮助!

sed解决方案:

示例性test文件内容:

DHCPD_INTERFACE="eth4"
#DHCPD_INTERFACE="eth4"

sed 's/\([^#]\|^\)DHCPD_INTERFACE="eth4"/\1DHCPD_INTERFACE="eth2"/g' test

输出:

DHCPD_INTERFACE="eth2"
#DHCPD_INTERFACE="eth4"

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM