Regex 如何在perl中从日志文件中提取数据

Regex 如何在perl中从日志文件中提取数据,regex,string,perl,file,Regex,String,Perl,File,我是perl新手,希望从日志文件中提取信息(名称、描述、PID、VID、SN)以供使用。下面是日志文件中一个条目的示例 NAME: "data1023", DESCR: "some information" PID: ABC-0123-xyz , VID: V01 , SN: ABC1234567 我试着用逗号作为分隔符来分割,但没有多大帮助。有人能提出一个更好的方法来解决这个问题吗?您没有给我们太多,但基于一些假设,包括但不限于每个条目2林,这里有一个快速解决方案,您可以根据自己的

我是perl新手,希望从日志文件中提取信息(名称、描述、PID、VID、SN)以供使用。下面是日志文件中一个条目的示例

NAME: "data1023", DESCR: "some information"
PID: ABC-0123-xyz      , VID: V01 , SN: ABC1234567

我试着用逗号作为分隔符来分割,但没有多大帮助。有人能提出一个更好的方法来解决这个问题吗?

您没有给我们太多,但基于一些假设,包括但不限于每个条目2林,这里有一个快速解决方案,您可以根据自己的喜好进行构建

#!/usr/local/bin/perl

use strict;
use warnings;
use Data::Dumper;

my $lineno;
my @parts;
my $entryno;
my $line;
my @log;

while (<>) {
    $line = $_;
    chomp $line;
    $lineno++;
    if ( $lineno % 2 ) {

        #It is line one of the entry
        $entryno++;
        @parts = split( /,\s*/, $line );
    }
    else {
        push( @parts, split( /,\s*/, $line ) );

        push( @log, [@parts] );
    }
}

print Dumper(\@log);
#/usr/local/bin/perl
严格使用;
使用警告;
使用数据::转储程序;
我的$lineno;
我的@parts;
我的$entryno;
我的美元线;
我的@log;
而(){
$line=$\;
chomp$行;
$lineno++;
如果($lineno%2){
#这是条目的第一行
$entryno++;
@零件=拆分(/,\s*/,$line);
}
否则{
推送(@parts,拆分(/,\s*/,$line));
推送(@log,[@parts]);
}
}
打印转储程序(\@log);

这完全取决于您希望如何显示数据。所有这些都是将每个条目的每个元素作为一个数组项,然后将每个条目作为一个数组项,构建一个数组。

您没有给我们太多的信息,但基于一些假设,包括但不限于每个条目2-lin,这里有一个快速解决方案,您可以根据自己的喜好构建

#!/usr/local/bin/perl

use strict;
use warnings;
use Data::Dumper;

my $lineno;
my @parts;
my $entryno;
my $line;
my @log;

while (<>) {
    $line = $_;
    chomp $line;
    $lineno++;
    if ( $lineno % 2 ) {

        #It is line one of the entry
        $entryno++;
        @parts = split( /,\s*/, $line );
    }
    else {
        push( @parts, split( /,\s*/, $line ) );

        push( @log, [@parts] );
    }
}

print Dumper(\@log);
#/usr/local/bin/perl
严格使用;
使用警告;
使用数据::转储程序;
我的$lineno;
我的@parts;
我的$entryno;
我的美元线;
我的@log;
而(){
$line=$\;
chomp$行;
$lineno++;
如果($lineno%2){
#这是条目的第一行
$entryno++;
@零件=拆分(/,\s*/,$line);
}
否则{
推送(@parts,拆分(/,\s*/,$line));
推送(@log,[@parts]);
}
}
打印转储程序(\@log);

这完全取决于您希望如何显示数据。所有这一切都是将每个条目的每个元素作为一个数组项,然后将每个条目作为一个数组项,从而构建一个数组。

您可以进一步指定输出的格式吗?SN看起来像什么?可以用数字开头吗?请提供一些额外的信息:1:这两行是分开的还是数据包含在一行中?2:文件中有双引号吗?那真是一些混乱的数据。你是复制粘贴,还是手工打字?我这样问是因为DESCR字段后面没有逗号,PID后面的逗号前面有空格,VID后面的逗号前面有空格。我想这些可能是固定宽度的字段,但它看起来只是几个可能的打字错误。这是系统生成的日志。两行放在一起形成一个条目。日志中存在双引号。我希望所有数据都可以作为字符串访问,以供以后使用。您可以进一步指定输出的格式吗?SN看起来像什么?可以用数字开头吗?请提供一些额外的信息:1:这两行是分开的还是数据包含在一行中?2:文件中有双引号吗?那真是一些混乱的数据。你是复制粘贴,还是手工打字?我这样问是因为DESCR字段后面没有逗号,PID后面的逗号前面有空格,VID后面的逗号前面有空格。我想这些可能是固定宽度的字段,但它看起来只是几个可能的打字错误。这是系统生成的日志。两行放在一起形成一个条目。日志中存在双引号。我希望所有数据都可以作为字符串访问以供以后使用。open(FH,“对!你可以这样做。最好使用像这样的三参数open语句
open(my$FH),(open(FH,“对!你可以这样做)。最好使用像这样的三参数open语句
open(my$FH),”