2014-10-23 4 views
1

Я пытаюсь разделить эти ценности, я не получаю, как и ожидалосьPerl регулярное выражение несколько слов в строке

$line = "sep 11 14:06:18 github-01-com sshd[4609]: Received disconnect from 192.168.1.1: disconnected by user"; 

if($line =~ /^(.*)\s+(\w+)/){ 
print "$1\n$2\n"; 

Я пытаюсь получить выход, как эти

$val1 = "sep 11 14:06:18"; 
$val2 = "github-01-com"; 
$val3 = "sshd[4609]:" 
$val4 = "Received disconnect from 192.168.1.1: disconnected by user" 

благодаря

ответ

2

Для этой конкретной линии вы можете ее декодировать следующим образом:

#!/usr/bin/perl 

use strict; 
use warnings; 

my $line = "sep 11 14:06:18 github-01-com sshd[4609]: Received disconnect from 192.168.1.1: disconnected by user"; 

if ($line =~ m/^(\w+\s+\d+\s+(?:\d|:)+)\s+([^\s]+)\s+([^\s]+)\s+(.*)$/) { 
    print "\$1 = $1\n\$2 = $2\n\$3 = $3\n\$4 = $4\n"; 
} 

Вот результат:

$1 = sep 11 14:06:18 
$2 = github-01-com 
$3 = sshd[4609]: 
$4 = Received disconnect from 192.168.1.1: disconnected by user 

Кстати, зависит от того, какой тип файла журнала вы пытаетесь разобрать, может быть существуют некоторые модули, чтобы сделать это, попробуйте поискать их в CPAN.

+0

@scm Вы также можете искать модули для анализа файлов журнала в [CPAN] (http://search.cpan.org/). –

+0

уверен, спасибо – organicuser

Смежные вопросы