我在
下面有xml文件<?xml version="1.0" encoding="UTF-8"?>
<programme start="20160813000000" stop="20160813003000">
<category lang="en">News</category>
</programme>
<programme start="20160813003000" stop="20160813010000">
<category lang="en">TV Show</category>
</programme>
<programme start="20160813010000" stop="20160813060000">
<category lang="en">Sports</category>
</programme>
</xml>
如何使用linux批处理文件将开始和停止日期时间格式转换为YYYY / MM / DD HH:mm?
答案 0 :(得分:1)
这真的是sed而不是awk的工作,因为sed是单个行上简单替换的最佳工具(awk用于其他所有内容):
$ sed -E 's,((start|stop)="....)(..)(..)(..)(..)..",\1/\3/\4 \5:\6",g' file
<?xml version="1.0" encoding="UTF-8"?>
<programme start="2016/08/13 00:00" stop="2016/08/13 00:30">
<category lang="en">News</category>
</programme>
<programme start="2016/08/13 00:30" stop="2016/08/13 01:00">
<category lang="en">TV Show</category>
</programme>
<programme start="2016/08/13 01:00" stop="2016/08/13 06:00">
<category lang="en">Sports</category>
</programme>
</xml>
如果你想保持秒数,那么显然只需将它们包含在捕获组中即可:
$ sed -E 's,((start|stop)="....)(..)(..)(..)(..)(.."),\1/\3/\4 \5:\6:\7,g' file
<?xml version="1.0" encoding="UTF-8"?>
<programme start="2016/08/13 00:00:00" stop="2016/08/13 00:30:00">
<category lang="en">News</category>
</programme>
<programme start="2016/08/13 00:30:00" stop="2016/08/13 01:00:00">
<category lang="en">TV Show</category>
</programme>
<programme start="2016/08/13 01:00:00" stop="2016/08/13 06:00:00">
<category lang="en">Sports</category>
</programme>
</xml>
答案 1 :(得分:1)
sed
可用于进行文本转换。
您可以使用:
sed 's@\(start="\|stop="\)\([0-9]\{4\}\)\([0-9]\{2\}\)\([0-9]\{2\}\)\([0-9]\{2\}\)\([0-9]\{2\}\)\([0-9]\{2\}\)@\1\2/\3/\4 \5:\6:\7@g' filename
以上命令很难阅读和维护。但是,如果使用扩展的正则表达式选项-r
,则可以避免上述命令中的许多反斜杠。
sed -r 's@(start="|stop=")([0-9]{4})([0-9]{2})([0-9]{2})([0-9]{2})([0-9]{2})([0-9]{2})@\1\2/\3/\4 \5:\6:\7@g' filename
上述命令都只会在不更改原始文件的情况下打印输出,因此如果需要,您可能需要将输出重定向到新文件。
但是,如果要修改orriginal文件本身,则需要使用-i
选项,如:
sed -i 'command' filename
最后,如果你想在修改之前创建origianl文件的备份 - 以防万一 - 你可以这样做:
sed -i.bak 'command' filename
答案 2 :(得分:0)
使用&#34; date -j -f&#34;命令。例如:
date -j -f "%Y%m%d" "27 JUN 2011" +%Y/%m/%d