[英]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.