[英]SED Replace Matching Line but not if it's commented out
My text contains a line like this: 我的文字包含这样的一行:
DHCPD_INTERFACE="eth4"
There are other lines containing #DHCPD_INTERFACE=
其他行包含
#DHCPD_INTERFACE=
I want to replace the whole line DHCPD_INTERFACE="eth4"
matching on DHCPD_INTERFACE=
but not if the line contains a #
我想替换与
DHCPD_INTERFACE="eth4"
匹配的整行DHCPD_INTERFACE="eth4"
,但如果行包含#
, DHCPD_INTERFACE=
希望替换
I've tried: sed -i.bak '/^#/!s/DHCPD_INTERFACE=/DHCPD_INTERFACE="eth2"/g' dhcpd
我试过了:
sed -i.bak '/^#/!s/DHCPD_INTERFACE=/DHCPD_INTERFACE="eth2"/g' dhcpd
But this doesn't replace the whole line. 但这并不能取代整条生产线。
This DHCPD_INTERFACE="eth4"
should be updated to DHCPD_INTERFACE="eth2"
but no line containing a #
and DHCPD_INTERFACE=
should be changed. 此
DHCPD_INTERFACE="eth4"
应该更新为DHCPD_INTERFACE="eth2"
但不应更改包含#
和DHCPD_INTERFACE=
行。
How can I do this.. ? 我怎样才能做到这一点.. ? Thanks
谢谢
您可以使用anchor( ^
)来匹配行的开头:
sed 's/^\(DHCPD_INTERFACE="eth\)4"/\12"/' file
You can first replace the lines with a '#', then replace the lines with "eth4", and finally get back the ones with the '#'. 您可以先将行替换为“#”,然后将行替换为“ 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
Not the best solution, but still a working one. 不是最佳解决方案,但仍然是可行的解决方案。 Hope I helped !
希望我有所帮助!
sed solution: sed解决方案:
The exemplary test
file contents: 示例性
test
文件内容:
DHCPD_INTERFACE="eth4"
#DHCPD_INTERFACE="eth4"
sed 's/\([^#]\|^\)DHCPD_INTERFACE="eth4"/\1DHCPD_INTERFACE="eth2"/g' test
The output: 输出:
DHCPD_INTERFACE="eth2"
#DHCPD_INTERFACE="eth4"
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.