【问题标题】:replace contents between XML tag [duplicate]替换 XML 标记之间的内容 [重复]
【发布时间】:2017-02-25 06:08:51
【问题描述】:

我有一个 XML 文件

<RangeType>3</RangeType>
<RangeAmount>1</RangeAmount>
<FromDate>2016/8/12 00:00:00</FromDate>
<ToDate>2016/8/12</ToDate>
<SyncOnSelect>0</SyncOnSelect>
<RunEvery>0</RunEvery>

我想将 Fromdate 内容(可能是任何日期)替换为 2016/09/21,我打算每天都这样做,将其更改为今天

<RangeType>3</RangeType>
<RangeAmount>1</RangeAmount>
<FromDate>2016/09/21</FromDate>
<ToDate>2016/8/12</ToDate>
<SyncOnSelect>0</SyncOnSelect>
<RunEvery>0</RunEvery>

我试过了

sed 's/<FromDate>*<\/FromDate>/<FromDate>2016\/09\/21<\/FromDate>/g'

我该怎么做?

【问题讨论】:

  • 将 内容替换为 2016/09/21
  • 这不是 HTML,这是 XML。无论如何,使用 XML 解析器。
  • 只是您尝试的命令中的一个错字:* 应该是 .*
  • 成功了,非常感谢 Sundeep
  • @lwhuang,仅用于“作品”的价值非常低的情况。 sed 无法理解 XML 语法:例如,如果在 &lt;FromDate 和 &gt; 之间有换行符或空格,您的文档仍然是完全有效的 XML(对于任何兼容的解析器具有完全相同的含义),或者您的文件中任何地方都没有换行符,但是这些更改中的任何一个都会弄乱您基于 sed 的方法。

标签: regex xml bash replace sed


【解决方案1】:

使用真正的 XML 解析器,例如XMLStarlet:

newValue=$(date '+%Y/%m/%d 00:00:00')
xmlstarlet ed -u '//FromDate' -v "$newValue" \
   <in.xml >out.xml

【讨论】:

    猜你喜欢
    • 2020-08-11
    • 2018-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-21
    • 2015-02-18
    • 1970-01-01
    • 2014-10-28
    相关资源
    最近更新 更多