通过脚本更新 xml 标签的值
Updating value of xml tag through script
我需要通过 shell 脚本更新以下 xml 标签的值。
<sample>4</sample>
我试过下面的方法,但它不起作用..
sed -i '' 's/\(<[^"]*"sample">\)\([^<]*\)\(<[^>]*\)/"$sampleVal"/g' $CONFIG_FILE
知道缺少什么吗?
更新完整 xml 个节点:
<?xml version="1.0" encoding="ISO-8859-1"?>
<Server>
<userInput>
<sample>0</sample>
<A>
<a1>9999</a1>
<a2>11111</a2>
</A>
<B>
<b1>10389</b1>
<b2>8000</b2>
</B>
<C>10500</C>
</userInput>
</Server>
更新命名空间:
<?xml version="1.0" encoding="ISO-8859-1"?>
<Server xmlns="http://a/b/c/sample.com">
<userInput>
<sample>0</sample>
<A>
<a1>9999</a1>
<a2>11111</a2>
</A>
<B>
<b1>10389</b1>
<b2>8000</b2>
</B>
<C>10500</C>
</userInput>
</Server>
使用 xmlstarlet:
xmlstarlet ed -u '/Server/userInput/sample/text()' -v "100" file.xml
输出:
<?xml version="1.0"?>
<Server>
<userInput>
<sample>100</sample>
<A>
<a1>9999</a1>
<a2>11111</a2>
</A>
<B>
<b1>10389</b1>
<b2>8000</b2>
</B>
<C>10500</C>
</userInput>
</Server>
如果您想编辑文件 "in place" 添加选项 -L
:
xmlstarlet ed -L -u '/Server/userInput/sample/text()' -v "100" file.xml
如果要省略 XML 声明 (<?xml ...?>
) 添加选项 -O
:
xmlstarlet ed -O -u '/Server/userInput/sample/text()' -v "100" file.xml
输出:
<Server>
<userInput>
<sample>100</sample>
<A>
<a1>9999</a1>
<a2>11111</a2>
</A>
<B>
<b1>10389</b1>
<b2>8000</b2>
</B>
<C>10500</C>
</userInput>
</Server>
我需要通过 shell 脚本更新以下 xml 标签的值。
<sample>4</sample>
我试过下面的方法,但它不起作用..
sed -i '' 's/\(<[^"]*"sample">\)\([^<]*\)\(<[^>]*\)/"$sampleVal"/g' $CONFIG_FILE
知道缺少什么吗?
更新完整 xml 个节点:
<?xml version="1.0" encoding="ISO-8859-1"?>
<Server>
<userInput>
<sample>0</sample>
<A>
<a1>9999</a1>
<a2>11111</a2>
</A>
<B>
<b1>10389</b1>
<b2>8000</b2>
</B>
<C>10500</C>
</userInput>
</Server>
更新命名空间:
<?xml version="1.0" encoding="ISO-8859-1"?>
<Server xmlns="http://a/b/c/sample.com">
<userInput>
<sample>0</sample>
<A>
<a1>9999</a1>
<a2>11111</a2>
</A>
<B>
<b1>10389</b1>
<b2>8000</b2>
</B>
<C>10500</C>
</userInput>
</Server>
使用 xmlstarlet:
xmlstarlet ed -u '/Server/userInput/sample/text()' -v "100" file.xml
输出:
<?xml version="1.0"?>
<Server>
<userInput>
<sample>100</sample>
<A>
<a1>9999</a1>
<a2>11111</a2>
</A>
<B>
<b1>10389</b1>
<b2>8000</b2>
</B>
<C>10500</C>
</userInput>
</Server>
如果您想编辑文件 "in place" 添加选项 -L
:
xmlstarlet ed -L -u '/Server/userInput/sample/text()' -v "100" file.xml
如果要省略 XML 声明 (<?xml ...?>
) 添加选项 -O
:
xmlstarlet ed -O -u '/Server/userInput/sample/text()' -v "100" file.xml
输出:
<Server>
<userInput>
<sample>100</sample>
<A>
<a1>9999</a1>
<a2>11111</a2>
</A>
<B>
<b1>10389</b1>
<b2>8000</b2>
</B>
<C>10500</C>
</userInput>
</Server>