我的文字包含这样的一行:
DHCPD_INTERFACE="eth4"
还有其他行包含#DHCPD_INTERFACE=
我想替换DHCPD_INTERFACE="eth4"
上匹配的整行DHCPD_INTERFACE=
,但如果该行包含#
我试过了:
sed -i.bak '/^#/!s/DHCPD_INTERFACE=/DHCPD_INTERFACE="eth2"/g' dhcpd
但这并不能取代整条生产线。
此DHCPD_INTERFACE="eth4"
应更新为DHCPD_INTERFACE="eth2"
,但不得更改包含#
和DHCPD_INTERFACE=
的行。
我该怎么做..? 感谢
答案 0 :(得分:1)
您可以使用锚点(^
)来匹配行的开头:
sed 's/^\(DHCPD_INTERFACE="eth\)4"/\12"/' file
答案 1 :(得分:0)
您可以先用'#'替换这些行,然后用" eth4"替换这些行,最后使用'#&#取回行39;
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
不是最好的解决方案,但仍然是有效的解决方案。希望我帮忙!
答案 2 :(得分:0)
sed 解决方案:
示例test
文件内容:
DHCPD_INTERFACE="eth4"
#DHCPD_INTERFACE="eth4"
sed 's/\([^#]\|^\)DHCPD_INTERFACE="eth4"/\1DHCPD_INTERFACE="eth2"/g' test
输出:
DHCPD_INTERFACE="eth2"
#DHCPD_INTERFACE="eth4"