首页 > 解决方案 > 没有日期的日期匹配行

问题描述

好的,我有一个过滤购买日期的大日志文件。

ps6100-01:SP:12-Nov-2014 15:00:02 I am broken help me
ps6100-01:SP:12-Nov-2014 15:00:02 I am broken help me i got to much to say
so I continue on the next line of the file
ps6100-01:SP:12-Nov-2014 15:00:02 I am broken help me
ps6100-01:SP:12-Nov-2014 15:00:02 I am broken help me
ps6100-01:SP:11-Nov-2013 15:00:02 I am fine
ps6100-01:SP:11-Nov-2013 15:00:02 I am fine

我正在使用它来提取当前年份的事件

CurYear=`date | awk '{ print $6 }'` 
perl -ne "print if /-$CurYear/" $file

没有日期的线根本不会被拉动。所以如果运行我的声明,我想要这个。

ps6100-01:SP:12-Nov-2014 15:00:02 I am broken help me
ps6100-01:SP:12-Nov-2014 15:00:02 I am broken help me i got to much to say
so I continue on the next line of the file
ps6100-01:SP:12-Nov-2014 15:00:02 I am broken help me
ps6100-01:SP:12-Nov-2014 15:00:02 I am broken help me

但是我得到了这个,有时它有几行,所以我在输出中遗漏了一些关键的东西。

ps6100-01:SP:12-Nov-2014 15:00:02 I am broken help me
ps6100-01:SP:12-Nov-2014 15:00:02 I am broken help me i got to much to say
ps6100-01:SP:12-Nov-2014 15:00:02 I am broken help me
ps6100-01:SP:12-Nov-2014 15:00:02 I am broken help me

标签: bashperlawksed

解决方案


你可以为此使用 perl

这假设 ps6100 对所有有日期的行都是通用的,如果不是所有行都通用,您可能需要将其更改为其他正则表达式

perl -ne 'chomp; /$ENV{"CurYear"}/ && do {print "\n$_"; $x=4}; --$x > 0 && $_ !~ /ps6100/ && print' file.log

推荐阅读