繁体   English   中英

使用sed动态修补bean配置XML文件?

[英]Patching bean config XML file dynamically using sed?

我有一个如下所示的bean配置XML文件:

<?xml version="1.0" encoding="UTF-8"?>
<beans>
    <bean id="myDataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName">
            <value>MyDriver</value>
        </property>
        <property name="url">
            <value>#####</value>
        </property>
        <property name="username">
            <value>myUser</value>
        </property>
        <property name="password">
            <value>myPassword</value>
        </property>
    </bean>
</beans>

我想用sed动态替换字符串#####

#####可以具有不同的值,例如myUrl1myUrl2等,应替换为另一个给定的myUrlX

所以结果应该是这样的:

        ...
        <property name="url">
            <value>myUrlX</value>
        </property>
        ...

到目前为止,我仅使用以下sed命令接近了解决方案:

sed -n "1h;1!H;${;g;s|\(<property [^>]*>.*<value>\).*\(</value>.*</property>\)|\1myUrl\2|g;p;}" test.xml

但这代替了XML文件中的myPassword字符串,而不是#####

谁能给我一个提示,我需要在sed命令中进行哪些更改?

非常感谢!

使用xmlstarlet

xml ed --update "/beans/bean[@id='myDataSource']/property[@name='url']/value" --value myUrlX inputfile.xml

查询:

xml sel -t -m "/beans/bean[@id='myDataSource']/property[@name='url']" -v value inputfile.xml

将它们放在一起:

#!/bin/bash
file=inputfile.xml
val=$(xml sel -t -m "/beans/bean[@id='myDataSource']/property[@name='url']" -v value "$file")
if [[ $val == "foo" ]]
then
    val=bar
    xml ed --update "/beans/bean[@id='myDataSource']/property[@name='url']/value" --value "$val" "$file"
fi

在我的系统上,命令是xmlstarlet而不是xml

不要使用正则表达式。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM