【问题标题】:change date format in a nested xml field without xml parsing在没有 xml 解析的情况下更改嵌套 xml 字段中的日期格式
【发布时间】:2018-01-31 07:18:53
【问题描述】:

我有一个 XML 文件,其中的行类似于

...
     <Placemark>
       <name>ACME Pinerolo TO - 31/05/2017</name>
   ...
     </Placemark>
...
     <Placemark>
       <name>SOME OTHER COMPANY Caselecchio BO - 21/06/2016</name>
   ...
     </Placemark>
...

     <Placemark>

而我想要达到的最终结果是

...
     <Placemark>
       <name>TO 170531 ACME Pinerolo TO</name>
   ...
     </Placemark>
...
     <Placemark>
       <name>BO 160821 SOME OTHER COMPANY Caselecchio</name>
   ...
     </Placemark>

我认为可以在不解析 XML 的情况下使用 awk、sed、xargs,但我不知道如何。

【问题讨论】:

    标签: xml date awk sed format


    【解决方案1】:

    对于 ERE 和 \s+\S:使用 GNU sed:

    $ sed -E 's:(<name>)(.*)\s+(\S+\s+)-\s+([0-9]+)/([0-9]+)/[0-9]{2}([0-9]+):\1\3\6\5\4 \2:' file
    ...
         <Placemark>
           <name>TO 170531 ACME Pinerolo</name>
       ...
         </Placemark>
    ...
         <Placemark>
           <name>BO 160621 SOME OTHER COMPANY Caselecchio</name>
       ...
         </Placemark>
    ...
    
         <Placemark>
    

    idk 如何使“TO”出现在 1 行的末尾而不是“BO”出现在另一行的末尾,或者如何将 21/**06**/2016 转换为 16**08**21 - 我认为这些是您预期输出中的拼写错误。

    当然,以上内容很脆弱,并且基于您问题中有限的信息和示例,因此 YMMV 将其用于其他数据。

    【讨论】:

    • 是的,你猜对了:这是一个拼写错误。可以的,谢谢
    猜你喜欢
    • 1970-01-01
    • 2021-12-10
    • 2023-03-04
    • 1970-01-01
    • 2011-06-28
    • 1970-01-01
    • 1970-01-01
    • 2014-09-19
    • 2013-07-27
    相关资源
    最近更新 更多