通过脚本更新 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>