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}}
答案 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