我尝试使用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。
欢迎任何建议
答案 0 :(得分:2)
使用正则表达式解析XML总是会有问题,因为XML不是常规语言。相反,您可以使用适当的XML解析器,例如使用XMLStarlet:
xmlstarlet ed --inplace -u "keyStore/password" -v "$WSO2_STORE_PASS" $WSO2_PATH/$1/repository/conf/broker.xml
答案 1 :(得分:1)
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"