簡體   English   中英

使用sed替換多行xml

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM