使用sed

时间:2017-07-07 21:37:24

标签: xml bash jenkins sed

我们有一个jenkins服务器有太多的工作,大多数工作都有Build触发器作为Poll SCM。我想删除所有作业的触发器。寻找一种简单的方法来做到这一点。我看到无论何时设置构建触发器属性,config.xml都有 -

<triggers>
    <hudson.triggers.SCMTrigger>
      <spec>
        # poll infrequently and rely on Stash webhooks to trigger builds
        @daily
      </spec>
      <ignorePostCommitHooks>false</ignorePostCommitHooks>
    </hudson.triggers.SCMTrigger>
</triggers>

每当Poll SCM标志设置为false时,config.xml中的相同元素如下 -

 <triggers/>

我正在寻找一种简单的方法,使用sed替换上面的触发器标签,但是无法使用sed获取它。

我在jobs文件夹中尝试了这个,但它不起作用 -

sudo find . -name "config.xml" -print0 | sudo xargs -0 sed -i '' -e 's|<triggers>.*<\/triggers|<triggers\/>|g'

所以基本上我想替换上面的triggers元素的全部内容以及只有这个的开始和结束触发器标记

<triggers/>

1 个答案:

答案 0 :(得分:3)

sed是一个流编辑器,逐行读取文件。您的模式跨越文件中的多行,这就是它永远不匹配的原因。

在尝试替换之前,你应该让sed将整个文件读入模式空间......

sed ':a;N;$!ba; s|<triggers>.*<\/triggers>|<triggers\/>|g' example.xml

...或使用其他工具(最好适合XML文件,如xmlstarlet):

xmlstarlet ed -O -u /triggers -v '' example.xml