通过脚本更新xml标记的值

时间:2017-01-10 06:00:26

标签: xml bash xmlstarlet

我需要通过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>

1 个答案:

答案 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>