首页 > 解决方案 > Perl 在文件中搜索内容并使用正则表达式取出值

问题描述

我有一组日志文件,我想在其中搜索Sum每个文件中调用的单词,并取出文件中Sum关键字旁边的相应总和值。

我没有进行文件读取操作,而是将文件Tie::File的内容放在数组中,并考虑取出我需要的任何值。

这是我的代码:

...
my $logpath = "C:/Users/Vinod/Perl/LOG/";

opendir(DIR, $logpath);
while (my $file = readdir(DIR)) {

    next unless (-f "$logpath/$file");
    next unless ($file =~ m/\.log$/);

    my @lines;
    print "$file\n";

    tie @lines, 'Tie::File', $file, mode => O_RDWR;

    for (@lines) {
        print $_ if($_ =~ m/Sum/);
    }
    untie @lines;
}
closedir(DIR);

这是我试图从我的日志文件中提取的内容:test_log_file.log

....
....
=
> Sum: 10 PC's, 5 UPS's
End...

从上面test_log_file.log我想取出 value 10

但是该行print $_ if($_ =~ m/Sum/);正在打印整个文件内容。不知道如何取出包含SumPC关键字的行。这样我就可以10使用正则表达式获得价值。

我可以使用以下命令取出 Sum 值: $sum = qx/more $file | grep -i 'Sum' | grep 'PC' | awk -F " " '{print \$3}'/;

但是想使用 Perl 脚本本身来解决这个问题。

标签: perlfile-io

解决方案


逐行阅读。捕获数字并仅输出捕获的部分:

while (<>) { say $1 if /Sum: ([0-9]+)/ }

推荐阅读