>Привет всем
>Есть логфайл состоящий из записей вида "$date $time: $log_text"
>формат $date $time нам известен
>$log_text - может быть многострочным Если формат $date/$time неизвестен, там может быть что угодно, в том числе переводы строк, двоеточие и любые другие символы, тогда задача не решаема.
Советую подумать насчет того, как представить дату/время в виде регэкспа или набора регэкспов. Вот пример для записей вида
YYYY-MM-DD HH:MM:SS: text
text
text
while(<STDIN>) {
my $date, $text;
if (/^(\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}): (.*)/) {
process_entry($date, $text) if (defined $date && defined $text);
$date = $1;
$text = $2;
} else {
$text .= $2;
}
}
process_entry($date, $text) if (defined $date && defined $text);
sub process_entry {
my($date, $text) = @_;
# обработка записи
}
Если дата в сложном формате - вопрос только в том, чтобы узнать, начинается строка с даты или нет. Это может быть набор регэкспов иил что-то другое, вам виднее.