用于编辑 xml 文件的 bash 脚本

Posted

技术标签:

【中文标题】用于编辑 xml 文件的 bash 脚本【英文标题】:bash script to edit xml file 【发布时间】:2010-12-05 23:08:57 【问题描述】:

我想编辑一个 XML 程序的配置文件:

<software>
   <settings>
       ...
       <setting name="local directory" type="string">/home/username/</setting>
       ...
   </settings>
</software>

从 bash 脚本执行此操作的最简单方法是什么?

谢谢

【问题讨论】:

您要进行什么编辑? 本地目录的设置,其值 【参考方案1】:

使用 xmlstarlet:

xmlstarlet val -e file.xml
xmlstarlet ed -u "//settings/setting/@name" -v 'local directory2' file.xml
xmlstarlet ed -u "//settings[1]/setting/@name" -v 'local directory2' file.xml

# edit file inplace
xmlstarlet ed -L -u "//settings/setting/@name" -v 'local directory2' file.xml  

【讨论】:

我没有 -L 选项来编辑,你使用的是哪个版本的 xmlstartlet 和 unix? 啊,太棒了 - -L 选项正是我想要的。【参考方案2】:

根据您想要做什么,您可能想要使用一些特定于 XML 的工具(处理字符编码、维护 XML 格式正确等)。您可以使用普通的面向行的工具,但除非您小心(或做一些琐碎的事情),否则您很容易创建不兼容的 XML。

我使用XMLStarlet 命令行集。它是一组专门用于解析/操作 XML 的命令行实用程序。

【讨论】:

+1 到上面的评论,因为使用了花花公子这个词。 +1 发布以供参考。 但是默认安装的东西呢? @TomášZato, ...然后你最终会使用 Python(它内置了几个 XML 模块)。【参考方案3】:

大多数人可能会使用 sed 从 bash 脚本进行行编辑。如果你 实际上关心解析 XML,然后使用 Perl 之类的东西,它有一个现成的 XML 解析器。

【讨论】:

这可能是解决问题的一种方法。但在这种情况下,请尝试为此添加一些示例代码。不要给出模糊的句子【参考方案4】:

一个丑陋/不安全但有时最简单的方法是从 bash 调用 sed/perl/awk

【讨论】:

以上是关于用于编辑 xml 文件的 bash 脚本的主要内容,如果未能解决你的问题,请参考以下文章

用于归档文件然后复制新文件的 Bash 脚本

用于 MobileConfig 文件的 OS X 终端中的 XML 解析

从本地 bash 脚本文件夹中编辑 plist

使用 bash 脚本编辑 .tf 变量文件

bash 挂起处理变量的输出

bash 脚本导航目录子结构,然后对 .xml 文件进行操作