2010-07-21 57 views
0

我有一個屬性文件,其中,未改性時具有下面的行:追加使用sed對線,增加分離器如有必要

worker.list= 

我想用sed追加到該行的值,使得SED運行後,該文件中的行寫着:

worker.list=test 

但是,當我運行該腳本第二次,我想SED拿起一個值已經增加,從而增加了一個分隔符:

worker.list=test,test 

這是我的樹樁位(sed的坦白讓我害怕與它的力量,但是這是我的問題!)

豐富

回答

2

那容易!如果你正在運行GNU sed的,你可以寫它,而短

sed -e '/worker.list=/{s/$/,myValue/;s/=,/=/}' 

這將添加「 myvalue的」的路線,然後在等號後刪除逗號(如果有的話)。

如果你被困在其他一些平臺,你需要打破它除了像這樣

sed -e '/worker.list=/{' -e 's/$/,myValue/' -e 's/=,/=/' -e '}' 

這是一個非常愚蠢的腳本,它不知道值等所有腦幹(我想你可以做一個更詳細的解析,但你爲什麼?),但我想這就是它的美麗。哦,它會破壞這樣的

worker.list=,myval 

線將變成

worker.list=myval,test 

如果這是一個問題,讓我知道,我會解決這個問題你。

HTH。

+0

我有一個問題,因爲我也在學習SED相當於:你爲什麼不需要在第一個sed表達式'sed -e'/worker.list =/{s/$ /,myValue /; s/=,/ = /}''結尾處結束'/' '? – 2010-07-21 08:21:03

+0

謝謝 - 現在很明顯,我已經看到它!我不知道你可以像這樣連接操作。很高興知道。 – Rich 2010-07-21 08:21:37

+0

@Alberto;在結尾有一個關閉的'/'?請注意,第一部分'/ worker.list = /'是一個選擇器,那麼你有'/ $ /,myvalue /',它有一個所有需要的斜槓,'/ =,/ = /' 。關閉'/'你在找什麼? – falstro 2010-07-21 08:23:59

0

你也可以使用awk。將字段分隔符設置爲「=」。那麼你要追加什麼是永遠場數2例

$ more file 
worker.list= 
$ awk -F"=" '/worker\.list/{$2=($2=="")? $2="test" : $2",test"}1' OFS="=" file 
worker.list=test 
$ awk -F"=" '/worker\.list/{$2=($2=="")? $2="test" : $2",test"}1' OFS="=" file >temp 
$ mv temp file 
$ awk -F"=" '/worker\.list/{$2=($2=="")? $2="test1" : $2",test1"}1' OFS="=" file 
worker.list=test,test1 

或sed的答案

$ awk -F"=" '/worker\.list/{$2=",test1";sub("=,","=")}1' OFS="=" file