在没有xml解析的情况下更改嵌套xml字段中的日期格式

时间:2017-08-22 21:24:26

标签: xml date awk sed format

我有一个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>

我认为可以使用awk,sed,xargs,而无需解析XML,但我不知道如何。

1 个答案:

答案 0 :(得分:1)

使用GNU sed for EREs和\ s + \ S:

$ 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将其用于其他数据。