我有一个属性文件,未经修改时会有以下行:
worker.list=
我想使用sed向该行附加一个值,以便在sed运行后,该文件中的行显示为:
worker.list=test
但是,当我第二次运行脚本时,我希望sed选择已经添加了一个值,从而添加了一个分隔符:
worker.list=test,test
这有点让我感到困惑(坦率地说,sed吓坏了我的力量,但那是我的问题!)
富
答案 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