Я использовал http://www.regexe.com/ для проверки регулярного выражения, которое я создал, чтобы извлечь дату и время из syslog
, и он показывает мне, что регулярное выражение на самом деле правильное, выделяя дату и время. Однако, когда я пытаюсь это сделать в Perl, я возвращаюсь с указанием времени, а не даты.Regex не полностью соответствует строке
так, например, из строки Dec 9 12:45:36 osboxes NetworkManager[739]: <info> address 192.168.10.129
я бы вернулся 12:45:36
Вот мой сценарий:
use strict;
use warnings;
my $keywords = 'keywords.txt';
open(my $kw, '<:encoding(UTF-8)', $keywords)
or die "Could not open file '$keywords' $!"; # Open the file, throw an exception if the file cannot be opened.
chomp (my @keywordsarray = <$kw>); # Remove whitespace, and read it into an array
close($kw);# Close the file
my $syslog = 'syslog';
open(my $sl, '<:encoding(UTF-8)', $syslog)
or die "Could not open file '$keywords' $!"; # Open the file, throw an exception if the file cannot be opened.
chomp (my @syslogarray = <$sl>); # Remove whitespace, and read it into an array
close($sl);# Close the file
foreach my $line (@syslogarray)
{
foreach my $keyword (@keywordsarray)
{
if ($line =~ m/\Q$keyword\E/)
{
if ((my $date) = $line =~ m/[A-z]+\s{2}\d{1,}\s((\d{2}[:]){2}\d{2})/)
{
print "**". $keyword. "**". $date. "\n";
}
}
}
}
Мэтт, это не работает, я попробовал это раньше. Я использую Kali Linux, если это имеет значение. – Simon
Я только что тестировал [IDEONE и ваши регулярные выражения] (http://ideone.com/wduhGO). –
stribizhev Чего я хочу достичь - это дата и время, а не только дата. – Simon