2017-06-20 87 views
0

我想使用sed替換xml文件中的標記內的值。sed替換xml標記

<version> xxxx-SS </version> 

我想用一些shell變量$ ver替換xxxx-SS。 最終的結果應該是

<version>$ver</version> 

sed命令也應更換第一實例之後退出。

到目前爲止,我只能追加到xxxx-SS,並且在第一場比賽後無法退出。

sed 's#\(<version>\)*\(</version>\)#\1'$ver'\2#g' test.xml 

這僅追加-SNAPSHOT tag.Basically之間的值,使得XXXX-SS $版本

+0

新值添加你想問題的代碼...使用XML正則表達式是不建議,使用XML解析器知道請 – Sundeep

+0

現在檢查 –

回答

0

您可以嘗試使用awk,那就更簡單的實現你的願望,

$ cp test.xml test_orig.xml 

$ awk '/<version> xxxx-SS <\/version>/{gsub(/<version> xxxx-SS <\/version>/,"<version> $ver </version>",$0)}1' test_orig.xml > test.xml 
$ cat test.xml 
... 
<version> $ver </version> 
... 

$ rm test_orig.xml 

該命令將替代xxxx-SStest(修改VAR值,你想要什麼)

+0

它後只增加標籤,而不是在兩者之間。並且它不寫入同一個文件。 –

+0

@KshitijGarg請編輯問題以顯示您的預期結果。 – CWLiu

+0

請立即檢查 –

1

使用XML /小時tml解析器是處理xml/html文檔的正確方法。不要對這種情況使用sed/awk工具。

xmlstarlet溶液:

xmlstarlet ed -u "//version[1]" -v $ver test.xml 
  • ed - 編輯模式

  • -u - 更新動作

  • //version[1] - XPath表達式來選擇第一version標籤

  • -v $ver - 選定節點