【问题标题】:Update selected tag values in XML file using shell script使用 shell 脚本更新 XML 文件中的选定标记值
【发布时间】:2014-04-08 08:05:34
【问题描述】:

我有一个类似于以下格式的 XML 文件:

<name>property1</name>
    <fullName>property1</fullName>
    <info> #property info# </info>
    <value>
      <current>true</current>
      <default>false</default>
    </value>

<name>property2</name>
    <fullName>property2</fullName>
    <info> #property info# </info>
    <value>
      <current>true</current>
      <default>false</default>
    </value>

<name>property3</name>
    <fullName>property3</fullName>
    <info> #property info# </info>
    <value>
      <current>true</current>
      <default>false</default>
    </value>

xml 文件包含数百个这样的属性。我只想将一些属性(比如property2)的当前标签的值从真更新为假。如何使用 Unix 命令来做到这一点?

我是 Unix 新手,我希望为此编写一个 Unix shell 脚本。任何帮助将不胜感激。

谢谢!

【问题讨论】:

标签: xml shell unix xml-parsing


【解决方案1】:

我认为,这对你有用:

http://www.unixcl.com/2010/01/replace-values-in-xml-using-sed-and-awk.html

后期编辑:

这样就可以了:

cat asd.xml | awk '{ x[NR] = $0 } END { for ( i=1 ; i<=NR ; i++ ) { if (x[i] ~ /<name>property2/ ) {x[i+4]="      <current>false</current>"}print x[i] }} ' > newfile.xml

其中 asd.xml 是原始文件,newfile.xml 是新文件。 一定要先备份原文件!

【讨论】:

  • 我之前浏览过上面的链接。它主要是关于在文件中的所有事件中全局更改一个值。我可以使用 /2 /3 来指出第 2 次或第 3 次出现,但正如我提到的那样,有数千个这样的属性,我无法计算特定标签的出现次数。需要想办法根据属性名有选择地更新。谢谢!
  • @Sourav 对不起,我做得很好,并测试了它,它适用于你给出的例子!如果它也适合你,请不要忘记接受我的回答!
  • 它工作正常。虽然我正在寻找一种可以内联更新文件而不是创建新文件的解决方案。不管怎么说,还是要谢谢你! :)
  • @Sourav 只需将命令末尾的文件名更改为输入文件名...(newfile.xml 到 asd.xml)
猜你喜欢
  • 2021-09-02
  • 1970-01-01
  • 2018-12-31
  • 1970-01-01
  • 1970-01-01
  • 2016-10-08
  • 2011-08-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多