簡體   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