2012-02-20 74 views
8

我想要一個簡單的單線程與sed來更新java屬性值。如果不知道Java屬性的當前設置是什麼,它可能是空的)使用sed更新java屬性文件中的屬性

example.java.property=previoussetting 

example.java.property=desiredsetting 
+0

[你嘗試過什麼?](http://mattgemmell.com/2008/12/08/what-have-you-tried/) – 2012-02-20 20:55:08

回答

7

假設的Linux的GNU的sed

之前,1個解決方案將是

編輯轉義'。'字符即s/example\.java.../每正確的註釋肯特

replaceString=desiredsetting 
sed -i "s/\(example\.java\.property=\).*\$/\1${replaceString}/" java.properties 

如果您的sed不兌現-i,那麼你必須要管理。tmp文件,即

sed "s/\(example\.java\.property=\).*\$/\1${replaceString}/" java.properties > myTmp 
    /bin/mv -f myTmp java.properties 

我希望這有助於。

+0

-1雖然OP具有接受了這個答案。 '點'不會被轉義,所以它意味着'任何字符'它可以改變文件中的錯誤屬性。這很危險! – Kent 2012-02-20 21:23:54

+0

@Kent:危險似乎是一個強詞彙。不過謝謝你幫助我改善了我的帖子。 Hoofamon:請參閱修改後的帖子,以改進您的Java屬性的替換。祝你們好運。 – shellter 2012-02-20 21:43:14

9

這將更新文件:

sed -i "/property.name=/ s/=.*/=newValue/" yourFile.properties 

這將打印到一個新文件

sed "/property.name=/ s/=.*/=newValue/" yourFile.properties > newFile.properties 

這是你如何更新多個屬性

sed -i -e "/property.name.1=/ s/=.*/=newValue1/" -e "/property.name.2=/ s/=.*/=newValue2/" yourFile.properties 

大師的sed可能會責怪我,因爲這不是最恰當的方式來做到這一點(例如我並沒有逃避這些問題),但是當你不想犧牲可讀性時,我認爲這是最好的選擇。

這裏的廣泛討論: How do I use sed to change my configuration files, with flexible keys and values?