2009-10-12 86 views
10

我想编辑一个程序,它是一个XML的配置文件:bash脚本编辑XML文件

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

什么是从一个bash脚本做到这一点,最简单的方法?

感谢

+3

你想要什么编辑做什么呢? – Mark 2009-10-12 11:58:10

+0

设置称为本地目录,其值 – 2009-10-12 16:21:57

回答

11

根据你想要做什么,你可能想要使用一些特定于XML的工具(处理字符编码,保持XML格式良好等)。您可以使用普通的面向行的工具,但除非您小心(或做一些小事),否则您可以轻松创建不兼容的XML。

我使用XMLStarlet命令行集。这是一套专门用于解析/操作XML的命令行工具。

+1

+1对我来说很漂亮。 – 2009-10-12 13:22:10

+0

+1以上评论使用的单词丹迪。 +1来发布,以供参考。 – 2013-01-30 16:44:57

+0

XMLStarlet ...好的提示! – 2015-08-26 22:54:36

-4

大多数人可能会使用SED从bash脚本做在线编辑。如果你真的关心解析XML,那么你可以使用像Perl这样的支持XML解析器的东西。

+0

这可能是一种解决问题的方法。但在这种情况下,请尝试添加一些示例代码。不要给出模糊的句子。 – 2017-10-04 04:12:18

-4

丑陋/不安全的,但有时最简单的就是叫SED/perl的庆典从

+2

你应该先阅读这个:http://stackoverflow.com/a/1732454/337079 – mogsie 2012-10-16 15:55:00

20

使用xmlstarlet/AWK:

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 
+0

我没有-L选项就地编辑,你使用的是什么版本的xmlstartlet和unix? – simpatico 2011-04-08 07:26:48

+0

啊,辉煌 - -L选项正是我所期待的。 – 2012-04-27 07:14:41