2016-02-25 45 views
0

我希望能夠更改配置文件中的特定設置,其中包括刪除註釋掉這些設置的註釋代碼(;)。此外,我想保留真實的評論。這意味着,更改配置文件和複雜註釋操作

some_setting=0 

;some_setting=0 

既能成爲

some_setting=9 

但是,這也意味着,

some_setting=0 ;an honest-to-goodness comment 

;some_setting=0 ;an honest-to-goodness comment 

some_setting=9 ;an honest-to-goodness comment 

我還不想離開

;Idle talk about some_setting= 

孤單。

我似乎能夠與

sed -e 's/^\s*;\?\s*some_setting\s*=.*\(;\)\?/some_setting=9 \1/' 

實現幾乎所有的這一點,但問題是真正的意見得到剝離出來有some_setting線。請注意,我已經在許多這些令牌周圍留出了空格。

我已經看過使用awk這個,但它似乎最好的選擇是sed

我在Debian 8.3上爲此使用了GNU sed 4.2.2。

+0

這是正確的:如果一行以'some_setting ='或'; some_setting ='開始,它應該被修改爲以'some_setting = 9'開頭,其他所有內容都不應該被觸摸? –

+0

「其他所有」意味着其他行應該保持不變,是的。 – Opux

回答

1

我以此爲測試輸入:

some_setting=0 
;some_setting=0 
some_setting=0 ;an honest-to-goodness comment 
;some_setting=0 ;an honest-to-goodness comment 
;Idle talk about some_setting= 

使用該命令:所以開始與可選;一行接着some_setting=

$ sed -r 's/^;?(some_setting=)[^[:space:]]*(.*)/\19\2/' infile 
some_setting=9 
some_setting=9 
some_setting=9 ;an honest-to-goodness comment 
some_setting=9 ;an honest-to-goodness comment 
;Idle talk about some_setting= 

和任何非空格字符來它是後換成以some_setting=9開頭的行;該行的其餘部分保持不變。

+0

這很不錯。什麼是':空間:'?我以前從來沒有見過。我不想假定這個設置的數據沒有空格,但現在我想到了,我也沒有考慮過分號會成爲設置的一部分的可能性。例如'some_setting ='設置w/a;在其中';然後是評論。' – Opux

+0

@Opux'[:space:]'是一個「POSIX字符類」。與'\ s'相同,但更便於攜帶。 如果可以引用設置幷包含分號,這仍然可能,但會變得更加麻煩。這樣的設置是否存在?如果是的話,你可以更新問題,如果你想。 –