[英]Using sed to replace multiline xml
我正在嘗試使用sed編輯/更改xml文件,但是多行出現問題
我要更改的文件具有(提取)
<keyStore>
<location>repository/resources/security/apimanager.jks</location>
<password>wso2carbon</password>
</keyStore>
我想更改密碼(只有keyStore密碼,該文件具有另一個密碼標簽)
我正在努力
sed -i 's/\(<keyStore.*>[\s\S]*<password.*>\)[^<>]*\(<\/password.*>\)/\1$WSO2_STORE_PASS\2/g' $WSO2_PATH/$1/repository/conf/broker.xml
但它不起作用(不進行任何更改,找不到模式)如果我在在線測試儀( https://regex101.com/ )中測試模式,則似乎可以正常工作。
另外,我嘗試用[^] *替換[\\ s \\ S] *,但是在這種情況下,sed會產生語法錯誤。
我正在使用Ubuntu 16.04.1。
任何建議都將受到歡迎
用正則表達式解析XML總是有問題的,因為XML不是正則語言。 相反,您可以使用適當的XML解析器,例如XMLStarlet :
xmlstarlet ed --inplace -u "keyStore/password" -v "$WSO2_STORE_PASS" $WSO2_PATH/$1/repository/conf/broker.xml
Sed不是這項工作的工具。 使用支持XML的工具,例如xsh :
open { shift } ;
insert text { shift } replace //keyStore/password/text() ;
save :b ;
運行為
xsh script.xsh "$WSO2_PATH/$1/repository/conf/broker.xml" "$WSO2_STORE_PASS"
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.