使用SED或其他unix命令修复日期格式?

时间:2016-07-15 13:46:31

标签: unix sed

我有一个包含日期格式的大文件,例如2014-3-16

年 - 月 - 日基本正则表达式[0-9] {4} - [0-9] {1,2} - [0-9] {1,2}

部分参赛作品的月/日/年时格格式不正确:分钟:上午上午(或下午)

基本正则表达式[0-9] {1,2} / [0-9] {1,2} / [0-9] {4} [0-9] {1,2}:[0 -9] {2} [AZ] M

我尝试使用python和csv阅读器修复这些日期,但csv阅读器引入了各种有趣的错误,例如更改其他字段中的引号以及在每行末尾添加^ M.所以我试图学习如何使用SED,我认为这将有答案。有什么帮助吗?

1 个答案:

答案 0 :(得分:1)

这应该做你想要的:

sed -i -e 's/\([0-9]\{1,2\}\)\/\([0-9]\{1,2\}\)\/\([0-9]\{2,4\}\)\([ :0-9]*[AP]\{1\}M\)/\3-\1-\2/g' file.txt

基本上有三种模式:

\(\[0-9]\{1,2\}\)\/

这意味着它会找到一个或两个[0-9]后跟一个/

然后最后一个

\([ :0-9]*[AP]\{1\}M\)

找到前三个模式之后但在AM或PM之前的空格,冒号和0-9。它将上面第三个模式之后的所有内容整合为M作为一种模式。

最后一部分:

\3-\1-\2

意味着它用第三个模式,第一个模式和第二个模式替换了s / ...和第一个/未被转义的东西。给你一个年,月,日期格式。