2009-10-12 142 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