Perl RegEx:打印与特定时间戳匹配的行

时间:2013-02-17 14:23:33

标签: regex perl

我遇到了一个我不确定如何解决的问题。我有一个大约2.5万行的巨大日志文件,每行信息分开一分钟(即09:00:00,09:01:00等)而不是在电子表格中提取我需要的每一行,我想通过脚本做到这一点。虽然我在编写剧本方面不是很有经验,但我正在努力学习Perl。

我想做的是:提取与时间戳匹配的每一行(09:03:00,09:18:00,09:33:00,09:48:00)并将其打印到新文件

这是我完成这个可怕的糟糕尝试

#!/usr/bin/perl
use warnings;
use strict;
use diagnostics;

my @expression = ( '09:03:00', '09:18:00', '09:33:00', '09:48:00' );
open FILE, "logfile.txt" or die $!;
if (FILE =~ @expression) {
print "$_\n";
}

2 个答案:

答案 0 :(得分:3)

您并没有在代码中使用正则表达式。你想要的表达是

my $expression = /09:(03|18|33|48):00/

扫描文件的代码可能也不起作用。更标准的方法是

while(<FILE>)
{
  if(/$expression/) { print; }
}

while(<FILE>)
{
  if($_ =~ $expression)
  {
    print "$_\n";
  }
}

答案 1 :(得分:2)

像这样:

open FILE, "logfile.txt" or die $!;
print grep /09:(03|18|33|48):00/, <FILE>;
close FILE or warn $!;

但是没有必要使用perl,即:

grep '09:\(03\|18\|33\|48\):00' logfile.txt > output.txt