2017-07-07 134 views
-1

我们有一个jenkins服务器,其作业太多,大多数作业都有Build触发器作为Poll SCM。我想删除所有作业的触发器。寻找一个简单的方法来做到这一点。我看到,每当构建触发属性设置config.xml中有这个 -使用sed替换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> 

每当投票SCM标志被设置为false,这个同样的元素在config.xml中如下 -

<triggers/> 

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

我想这从工作文件夹中,并没有与工作

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

所以基本上我想替换上面开始和结束沿触发元素的全部内容触发标签,只有这

<triggers/> 
+0

到目前为止您尝试过的'sed'尝试在哪里? –

+0

试过这个,它没有工作 - sudo找到。 -name“config.xml”-print0 | sudo xargs -0 sed -i''-e's | 。* <\/triggers | | g' – datastax

+0

目前还不清楚你想要改变什么(从 - >到);也许加上你的问题。从你的正则表达式模式看来,你似乎想要消除触发器标签之间的所有内容,并用''代替? –

回答

1

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

你应该要么使sed读取整个文件到模式空间的尝试置换前...

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

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

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

sed示例工作得很好。感谢@Lev Levitsky提出这个建议。这对我来说非常有用,大量的工作眨眼间就改变了。谢谢。 – datastax