附加到sed行,必要时添加分隔符

时间:2010-07-21 08:13:49

标签: bash scripting sed

我有一个属性文件,未经修改时会有以下行:

worker.list=

我想使用sed向该行附加一个值,以便在sed运行后,该文件中的行显示为:

worker.list=test

但是,当我第二次运行脚本时,我希望sed选择已经添加了一个值,从而添加了一个分隔符:

worker.list=test,test

这有点让我感到困惑(坦率地说,sed吓坏了我的力量,但那是我的问题!)

2 个答案:

答案 0 :(得分: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。

答案 1 :(得分: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