Ubuntu

sed 用於替換文件中未註釋的行

  • April 8, 2018

我已經搜尋並找到了我認為應該有效的消息靈通的答案,但我無法讓它們發揮作用。問題是我顯然不明白 sed 和所有的斜線以及這些與正則表達式有什麼關係。我認為這就是為什麼我不能從非常有用的答案(例如sed: -e expression unknown option to `s’ )中過橋到為我工作的原因。

/etc/網路/介面:

# WAN (Internet connection)
auto wlp3s0 
iface wlp3s0 inet dhcp
dns-nameservers 1.1.1.1 8.8.8.8 
wpa-conf /etc/wpa_supplicant_some1.conf
#wpa-conf /etc/wpa_supplicant_oldstuff.conf

bash腳本:

#!/bin/bash
NEW_LINE="wp-conf /etc/wpa_supplicant_someother.conf"
sed -i '/wpa-conf /c\'"$NEW_LINE" /etc/network/interfaces

以上的作品。文件中以 wpa-conf 開頭的整行替換為腳本中的新行,這很棒。

但是有一個令人討厭的警告:註釋的 wpa-conf 行也發生了變化。這是我試圖避免的。閱讀其他答案,我已經在腳本中嘗試了這些以及我可以想到的其他一些無望的變體無濟於事。這些會產生各種錯誤:

sed -i '/^#/!s/wpa-conf /c\'"$NEW_LINE" /etc/network/interfaces
sed -i '|^#|!s|wpa-conf /c\'"$NEW_LINE" /etc/network/interfaces
sed -i '|^#|!s|wpa-conf |c\'"$NEW_LINE" /etc/network/interfaces

我顯然不知道自己在做什麼,而且我顯然無法理解 sed 的工作原理,而其他答案只會讓我變得更糟。

我要做的就是用另一行替換一行,只要它不是被註釋的行。替換行必須以變數的形式給出,因為它來自其他來源,為簡潔起見未在此處顯示。

問候和感謝

我會檢查這個條目的第一個答案。如果您只想在以“wpa-conf”開頭的行上進行替換,您應該添加^並且應該做您想要的。

sed -i '/^wpa-conf /c\'"$NEW_LINE" /etc/network/interfaces

引用自:https://serverfault.com/questions/906574