正则表达式以匹配自定义日志文件中的日期和时间

标签 regex awk gawk

我正在编写一个脚本,为了实现卓越,必须将日期和时间格式从日志文件转换为时间戳。我想要这个以便以后轻松比较。

我的日志文件的格式是:

2012-11-06 10:32:45
<log message follows here on multiple lines in XML format> 

我正在使用以下 gawk 表达式将我的日期/时间转换为时间戳:

$ gawk '/^([0-9]{2,4}-?){3} ([0-9]{2}\:?){3}/{print $0;gsub(/\:/," ");print mktime($0)}' logfile.txt

输出将是:

2012-11-01 15:27:28
1293719248

这实际上是我要找的,但问题是正则表达式是否正确?由于我离正则表达式大师还很远,所以我也想知道这是否可以。当涉及到正则表达式时,这能以更奇特的方式完成吗?日志文件中使用的格式永远不会改变,因为我没有费心去匹配一个通用的日期/时间。也许我的表情中还有其他东西是fubar? :-)

最佳答案

要匹配的 ERE:

2012-11-06 10:32:45

它自己的一行是:

^[[:digit:]]{4}(-[[:digit:]]{2}){2} [[:digit:]]{2}(:[[:digit:]]{2}){2}$

但你可能会逃脱:

^[[:digit:]]([[:digit:]: -][[:digit:]]{2}){6}$

没有得到任何错误匹配。

关于正则表达式以匹配自定义日志文件中的日期和时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13248394/

相关文章:

awk - 偷看下一行,但不要消费它

awk - 可以设置全局 AWK 分隔符

regex - ansible lineinfile 模块用多行替换单行

mysql - MySQL 中的正则表达式排除括号内有特定单词的内容

perl - 在单次迭代中提取同一模式第一次出现和最后一次出现之间的所有内容

linux - 如何在 perl 脚本中插入 awk 命令?

javascript - 在 JS 中拆分字符串

javascript - 使用 RegExp 查找、复制和粘贴标签内容

bash - 删除第一列中的重复记录但不修改其余列

regex - 打印实际字段分隔符值而不是正则表达式