2017-06-20 150 views
0

我想使用sed替换xml文件中的标记内的值。sed替换xml标记

<version> xxxx-SS </version> 

我想用一些shell变量$ ver替换xxxx-SS。 最终的结果应该是

<version>$ver</version> 

sed命令也应更换第一实例之后退出。

到目前为止,我只能追加到xxxx-SS,并且在第一场比赛后无法退出。

sed 's#\(<version>\)*\(</version>\)#\1'$ver'\2#g' test.xml 

这仅追加-SNAPSHOT tag.Basically之间的值,使得XXXX-SS $版本

+0

新值添加你想问题的代码...使用XML正则表达式是不建议,使用XML解析器知道请 – Sundeep

+0

现在检查 –

回答

0

您可以尝试使用awk,那就更简单的实现你的愿望,

$ cp test.xml test_orig.xml 

$ awk '/<version> xxxx-SS <\/version>/{gsub(/<version> xxxx-SS <\/version>/,"<version> $ver </version>",$0)}1' test_orig.xml > test.xml 
$ cat test.xml 
... 
<version> $ver </version> 
... 

$ rm test_orig.xml 

该命令将替代xxxx-SStest(修改VAR值,你想要什么)

+0

它后只增加标签,而不是在两者之间。并且它不写入同一个文件。 –

+0

@KshitijGarg请编辑问题以显示您的预期结果。 – CWLiu

+0

请立即检查 –

1

使用XML /小时tml解析器是处理xml/html文档的正确方法。不要对这种情况使用sed/awk工具。

xmlstarlet溶液:

xmlstarlet ed -u "//version[1]" -v $ver test.xml 
  • ed - 编辑模式

  • -u - 更新动作

  • //version[1] - XPath表达式来选择第一version标签

  • -v $ver - 选定节点