perl正则表达式一行中有多个单词

perl正则表达式一行中有多个单词,perl,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

我试图分割这些值,但没有得到预期的结果

$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"

感谢这一行,您可以这样解码:

#!/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

顺便说一句,根据您尝试解析的日志文件的类型,可能存在一些模块来执行此操作,请尝试在中搜索。

@scm您也可以在中搜索模块来解析日志文件。