使用bash脚本更改xml文件的时间格式

时间:2018-02-19 14:58:55

标签: bash unix sed

我尝试使用bash脚本更改文件中时间的格式。

当前时间格式: 08:05:00

目标时间格式: 8-05

还有其他时间戳我不想在文件中更改,我要更改的每个实例都包含在xml中:

时间="当前时间格式"

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:1)

您必须使用XML解析器来解决此问题。我会用XML解析库和日期时间解析库附带的语言来实现。 Python适合该法案

import xml.etree.ElementTree as ET
from datetime import datetime
import sys

tree = ET.parse(sys.argv[1])

# for each element with a "time" attribute, alter the format of the attribute value
for elem in tree.findall('.//*[@time]'):
    time = datetime.strptime(elem.get('time'), '%H:%M:%S')
    elem.set('time', time.strftime('%k-%M').lstrip())

# print the new XML to stdout
print(bytes.decode(ET.tostring(tree.getroot())))

测试:

$ cat file.xml
<root>
<a>
<b time="08:05:00">
<c>text contains time 08:05:00</c>
</b>
<d foo="bar" time="19:54:55"/>
</a>
</root>

$ python3 alter_time.py file.xml > new.file.xml

$ cat new.file.xml
<root>
<a>
<b time="8-05">
<c>text contains time 08:05:00</c>
</b>
<d foo="bar" time="19-54" />
</a>
</root>

错误处理作为练习留下