从日志中提取http响应代码

时间:2013-04-13 20:57:07

标签: regex perl

Apache日志文件条目

64.242.88.10 - - [07/Mar/2004:20:11:33 -0800] "GET /twiki/bin/attach/TWiki/TWikiSite HTTP/1.1" 401 12846

使用正则表达式我想提取HTTP响应代码

=~ /HTTP/1.1"\s(response_code)\s/
print $response_code

我可以用Python或Ruby做这样的事情,但不知道我是否以及如何在Perl中做到这一点。

只需在不使用多个拆分操作的情况下提取特定值。

我只想扫描文件中的一行,然后打印放置在http_response_code的{​​{1}}

3 个答案:

答案 0 :(得分:2)

是的,您可以在perl中执行此操作,这是代码:

#!/usr/bin/env perl 

use strict;
use warnings;

open FILE, "test.txt" or die $!;
while( my $string = <FILE> )
{
    if( $string =~ /HTTP\/1.1"\s(\d+)/ )
    {
    print "$1\n";
    }
}

输出:

$ perl testRegex.pl 
401 

答案 1 :(得分:0)

这对我有用:

use strict;
use warnings;

my $line = qq!64.242.88.10 - - [07/Mar/2004:20:11:33 -0800] "GET /twiki/bin/attach/TWiki/TWikiSite HTTP/1.1" 401 12846!;

if( $line =~ m!HTTP/1.1" +(\d+)! ) {
    print $1, "\n";  # <--- prints: 401
}

答案 2 :(得分:0)

这里不需要正则表达式。 split更快更方便。

my $line = '64.242.88.10 - - [07/Mar/2004:20:11:33 -0800] "GET /twiki/bin/attach/TWiki/TWikiSite HTTP/1.1" 401 12846';

my $response_code = (split ' ', $line)[-2];
print $response_code;

<强>输出

401