【问题标题】:Add a node to specific key xml using sed使用 sed 将节点添加到特定密钥 xml
【发布时间】:2017-12-09 04:45:29
【问题描述】:

我正在尝试使用 sed 编辑 XML 文件。这是我要编辑的文件内容。

<configuration key="student1">
   <list>
     <value>abc</value>
     <value>def</value>
   </list>
</configuration>

我想通过比较key值的方式给现有节点添加如下值。

<configuration key="student1">
    <list>
      <value>abc</value>
      <value>NEWVALUE</value>
      <value>def</value>
    </list>
</configuration>

如何使用 sed 命令实现它?在看了很多帖子之后,xmlstarlet 是编辑 xml 文件的最佳选择。但由于权限问题,我无法安装。有人可以帮我解决吗?

更新:

我试过的是:

sed -i "s/\<\list\>/ \<value\> NEWVALUE\<\/VALUE\>/" xmlfile

这没有按预期工作,它将 list 标记替换为 NEWVALUE。但是我需要比较键值,然后遍历列表,然后添加新值。

【问题讨论】:

  • 添加您尝试过的 sed 代码...所以是关于帮助您处理您已经尝试过但卡住的代码...
  • 可能有一种方法可以在您的主目录中安装您想要的任何内容。 Sed(或任何其他文本处理程序)绝对不是适合这项工作的工具。
  • @Sundeep,我已经添加了我尝试过的代码。
  • @BasilJose 您尝试的内容与您想要的内容相去甚远..您只是想替换&lt;list&gt;标签..和\&lt;\&gt;具有匹配单词边界的特殊含义GNU sed ...您要比较的关键值是什么? student1 还是 &lt;value&gt;abc&lt;/value&gt;?无论如何,在这里使用sed 确实不是最好的主意

标签: xml bash shell sed sh


【解决方案1】:

如果你很绝望并且值的顺序并不重要,你可以使用 sed 并在结束列表标记之前插入值,这样:

sed -r '/\<\list\>/ i\ \t<value>NEWVAL</value>' xmlfile

搜索结束列表标签,然后输入值标签和 NEWVAL 值。

【讨论】:

  • 它不工作。 :( 我试过sed -i "s/\&lt;\list\&gt;/ \&lt;value\&gt; NEWVALUE\&lt;\/VALUE\&gt;/" xmlfile
  • 它不会因为您删除“i\”来插入新行。开头的 -i 只是提交对文件的任何更改。
猜你喜欢
  • 1970-01-01
  • 2014-07-23
  • 1970-01-01
  • 2019-05-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多