0

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放置在/HTTP/1.1"\s(response_code)\s/

4

3 回答 3

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 
于 2013-04-13T21:08:13.693 回答
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
}
于 2013-04-13T21:09:08.760 回答
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
于 2013-04-13T21:11:33.533 回答