我有一个属性文件,其中,未改性时具有下面的行:追加使用sed对线,增加分离器如有必要
worker.list=
我想用sed追加到该行的值,使得SED运行后,该文件中的行写着:
worker.list=test
但是,当我运行该脚本第二次,我想SED拿起一个值已经增加,从而增加了一个分隔符:
worker.list=test,test
这是我的树桩位(sed的坦白让我害怕与它的力量,但是这是我的问题!)
丰富
我有一个属性文件,其中,未改性时具有下面的行:追加使用sed对线,增加分离器如有必要
worker.list=
我想用sed追加到该行的值,使得SED运行后,该文件中的行写着:
worker.list=test
但是,当我运行该脚本第二次,我想SED拿起一个值已经增加,从而增加了一个分隔符:
worker.list=test,test
这是我的树桩位(sed的坦白让我害怕与它的力量,但是这是我的问题!)
丰富
那容易!如果你正在运行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。
你也可以使用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
我有一个问题,因为我也在学习SED相当于:你为什么不需要在第一个sed表达式'sed -e'/worker.list =/{s/$ /,myValue /; s/=,/ = /}''结尾处结束'/' '? – 2010-07-21 08:21:03
谢谢 - 现在很明显,我已经看到它!我不知道你可以像这样连接操作。很高兴知道。 – Rich 2010-07-21 08:21:37
@Alberto;在结尾有一个关闭的'/'?请注意,第一部分'/ worker.list = /'是一个选择器,那么你有'/ $ /,myvalue /',它有一个所有需要的斜杠,'/ =,/ = /' 。关闭'/'你在找什么? – falstro 2010-07-21 08:23:59