以下是XML的一部分,我希望将username
和password
更改为任何所需的值。
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName">
<value>com.mysql.jdbc.Driver</value>
</property>
<property name="url">
<value>jdbc:mysql://x.x.x.x:3306/app
</value>
</property>
<property name="username">
<value>user1</value>
</property>
<property name="password">
<value>pass1</value>
</property>
</bean>
<value>
和username
属性的值(password
标记)可能包含任何内容,例如user1
,pass1
,user2
,pass2
等
如何在shell中使用不同的值更新这些字符串?
答案 0 :(得分:0)
我认为这会对你有帮助,你可以改变你想要的;
if [ $# -ne 2 ];then
echo "usage: argument 1:username 2:password"
exit 1
fi
USERNAME=$1
PASSWORD=$2
echo "Change values in config.xml..."
cat <<EOF >test.xml
<bean id="dataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName">
<value>com.mysql.jdbc.Driver</value>
</property>
<property name="url">
<value>jdbc:mysql://x.x.x.x:3306/app
</value>
</property>
<property name="username">
<value>${USERNAME}</value>
</property>
<property name="password">
<value>${PASSWORD}</value>
</property>
</bean>
EOF
echo "Done."
答案 1 :(得分:0)
以下xmlstarlet
命令根据XPath表达式更新source.xml
文件中的密码值:
xmlstarlet ed --inplace \
-u "//bean[@id='dataSource']//property[@name='password']/value" \
-v 'new_pass' source.xml
注意,XPath表达式中的双斜杠(//
)从当前节点中选择与选择匹配的文档中的节点,无论它们在何处(读取this,例如)。我已将其包含在表达式中,因为我怀疑您在问题中提到的XML有许多父节点。
如果声明了名称空间,则应明确指定它。例如,如果根元素声明为<beans xmlns="http://www.springframework.org/schema/beans">
,那么您应该使用-N
全局选项指定命名空间:
xmlstarlet ed --inplace \
-N x=http://www.springframework.org/schema/beans \
-u "//x:bean//x:property[@name='password']/x:value" \
-v 'new_pass' source.xml
这只是一个示例命令,可以使用您在问题中发布的XML。如果您有不同的结构,请相应地调整XPath表达式。
source.xml (在运行命令之前)
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName">
<value>com.mysql.jdbc.Driver</value>
</property>
<property name="url">
<value>jdbc:mysql://x.x.x.x:3306/app
</value>
</property>
<property name="username">
<value>user1</value>
</property>
<property name="password">
<value>pass1</value>
</property>
</bean>
source.xml (运行命令后)
<?xml version="1.0"?>
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName">
<value>com.mysql.jdbc.Driver</value>
</property>
<property name="url">
<value>jdbc:mysql://x.x.x.x:3306/app
</value>
</property>
<property name="username">
<value>user1</value>
</property>
<property name="password">
<value>new_pass</value>
</property>
</bean>