2016-04-18 190 views
0

我想使用shell腳本編輯xml文件。編輯xml文件shell腳本

我有這樣的事情

<version>1.7.21</version> 

,我想我的腳本編輯這樣的.xml文件,使用可變

例如:$值= 3.2 「」命令修改xml文件',並得到這個:

<version>3.2</version> 

我一直在尋找在網絡上,但沒有工作對我來說..

編輯:我正在尋找一種通用的方式。

例如這篇文章的解決方案:How to change specific value of XML attribute using scripting on Mac

是不是我要找的,因爲它依賴於以前的XML文件。

回答

2

使用sed:

$ ver=3.2; 
$ sed "s/\(<version>\)[^<]*\(<\/version>\)/\1$ver\2/" <<< "<version>1.7.21</version>" 
<version>3.2</version> 

要應用到文件:

$ ver=3.2; 
$ sed -i "s/\(<version>\)[^<]*\(<\/version>\)/\1$ver\2/" file 

-i選項是編輯文件到位

更新:

要應用一個sed命令的路徑,則必須在逃生路徑斜線:

ver="\/path\/to\/fix\/CHANGE.XML"; 

或更改與字符sed的分隔符,你不會找到你的路徑。 |的示例:

sed "s|\(<version>\)[^<]*\(<\/version>\)|\1$ver\2|" 
+0

謝謝!我在jenkins中使用這個腳本,我無法獲得$ ver的價值。我總是在我的xml文件中給我寫''ver''。有沒有辦法直接在命令行中指示變量? (有時,這個變量可能是一個路徑,所以如何處理斜線問題?) – MxfrdA

+0

@MxfrdA你必須雙引號'「$ ver」'來展開變量。 – SLePort

+0

謝謝,第一個問題解決了,我可以看到我的變量。但是,當它是一條路徑時,腳本無法通過並得到:sed:-e表達式n°1,caractère53:option inconnue pour's'。對不起,我的詹金斯在法國 – MxfrdA