Bash 附加到带有sed的行,必要时添加分隔符

Bash 附加到带有sed的行,必要时添加分隔符,bash,scripting,sed,Bash,Scripting,Sed,我有一个属性文件,未修改时,该文件有以下行: worker.list= 我想使用sed向该行追加一个值,以便在sed运行后,文件中的行读取: worker.list=test 但是,当我第二次运行脚本时,我希望sed提取已经添加的值,从而添加一个分隔符: worker.list=test,test 这是困扰我的一点(坦白说,sed的力量让我害怕,但这是我的问题!) 有钱那很容易!如果您运行的是GNU sed,那么您可以将其写得相当简短 sed -e '/worker.list=/{s/$

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

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/=,/=}的结尾处,在最后一个
之前,需要一个结束符
/
?谢谢-现在我已经看到了!我不知道你能像那样连锁反应。“很高兴认识你。”阿尔贝托;在它的末尾有一个结束符
/
?请注意,第一部分
/worker.list=/
是一个选择器,然后是
s/$/,myvalue/
,其中包含它所需的所有斜杠,
s/=,/=/
。你在找哪一个结账?哎呀,选择器!好的,我认为
sed///
模式对于所有情况都是相同的,我将更深入地了解选择器,谢谢:)