2017-07-21 46 views
0

我的文本中包含這樣一行:SED更換匹配的行但如果它註釋掉

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

你可以先用'#'替換行,然後用「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 

不是最好的解決方案,但仍然是一個工作。希望我幫助!

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" 
+0

由於多數民衆贊成似乎是完美的。 – Tom

+0

@Tom,不客氣 – RomanPerekhrest

1

您可以使用一個錨(^)來匹配行的開頭:

sed 's/^\(DHCPD_INTERFACE="eth\)4"/\12"/' file