开发者

Appending to line with sed, adding separator if necessary

I have a properties file, which, when unmodified has the following line:

worker.list=开发者_C百科

I would like to use sed to append to that line a value so that after sed has run, the line in the file reads:

worker.list=test

But, when I run the script a second time, I want sed to pick up that a value has already been added, and thus adds a separator:

worker.list=test,test

That's the bit that stumps me (frankly sed scares me with its power, but that's my problem!)

Rich


Thats easy! If you're running GNU sed, you can write it rather short

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

That'll add ',myValue' to the line, and then remove the comma (if any) after the equal sign.

If you're stuck on some other platform you need to break it apart like so

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

It's a pretty stupid script in that it doesn't know about existance of values etc (I suppose you CAN do a more elaborate parsing, but why should you?), but I guess that's the beauty of it. Oh and it'll destroy a line like this

worker.list=,myval

which will turn into

worker.list=myval,test

If that's a problem let me know, and I'll fix that for you.

HTH.


you can also use awk. Set field delimiter to "=". then what you want to append is always field number 2. example

$ 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

or the equivalent of the sed answer

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

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜