代码之家  ›  专栏  ›  技术社区  ›  Rich

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

  •  0
  • Rich  · 技术社区  · 16 年前

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

    worker.list=
    

    我想使用sed将一个值附加到该行,这样在sed运行之后,文件中的行将显示:

    worker.list=test
    

    但是,当我第二次运行脚本时,我希望SED知道已经添加了一个值,因此添加了一个分隔符:

    worker.list=test,test
    

    这就是困扰我的地方(坦率地说,塞德用它的力量吓唬我,但那是我的问题!)

    丰富的

    2 回复  |  直到 16 年前
        1
  •  2
  •   falstro    16 年前

    这很容易!如果你在运行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.

        2
  •  0
  •   ghostdog74    16 年前

    你也可以用锥子。将字段分隔符设置为“=”。那么,您要附加的总是字段号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
    
    推荐文章