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