regex - 将日期从 ISO 时间格式转换为 yyyy/mm/dd.hh :mm:ss

标签 regex linux csv

如何转换:

2013-08-16T13:24:18+0200

从当前格式 yyyy-mm-ddThh:mm:ss+hhmm 到这种格式?

yyyy/mm/dd.hh:mm:ss (2013/08/18.13:24:18)

这些值在一个 csv 文件中,也有负值,所以我不能只用正斜杠替换连字符,我还想删除指定时区的部分。 我对 sed 和 awk 的了解非常基础。

最佳答案

拆分 CSV 可能非常棘手,具体取决于是引用所有内容还是不引用任何内容,或者引用某些字段。然后,我们可以开始担心您的字符串中是否有转义引号。或字符串中的逗号。

如果不更好地了解您的数据(也许您的字符串中没有逗号,也没有引号需要担心),您可能会也可能不会使用 sed/awk。如果您有复杂的 CSV,我建议您使用更强大的东西,例如 perl 和 Text::CSV。

因此,我将向您展示如何解析包含纯日期 的文件,以避免 CSV 的复杂性。

perl 方式:

cat tmp.txt | perl -e 'for (<>){ s!(\d+)\D(\d+)\D(\d+)T(\d+)\D(\d+)\D(\d+)\+.*!$1/$2/$3.$4:$5:$6!; print $_}'

SED 方式:

sed -r 's!([0-9]+)\D([0-9]+)\D([0-9]+)T([0-9]+)\D([0-9]+)\D([0-9]+)\+.*!\1/\2/\3.\4:\5:\6!' tmp.txt

关于regex - 将日期从 ISO 时间格式转换为 yyyy/mm/dd.hh :mm:ss,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18316168/

相关文章:

Python:根据条件重新排列 csv 行

node.js - 用户的Nodejs CSV数据导出系统

bash - 使用 "Sort"根据时间戳对终端中的 CSV 进行排序

c# - 在 C# 中使用正则表达式拆分字符串上的标记

javascript - 测试字符串中包含 3 个重复连续字符的单词

javascript - 在 Chrome 中创建多个 webgl 纹理

mysql - 更改mysql数据库的位置

c++ - Google re2 namedcapture,如何在 C++ 中解析结果?

c# - 正则表达式替换不会替换所有出现的地方

c - printf newline 有行缓冲区吗?