我需要通过shell脚本更新以下xml标记的值。
<sample>4</sample>
我在下面试过,但它不起作用..
sed -i '' 's/\(<[^"]*"sample">\)\([^<]*\)\(<[^>]*\)/\1"$sampleVal"\3/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>
答案 0 :(得分:2)
使用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>
如果你想编辑你的文件&#34;就地&#34;添加选项-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>