首页 > 解决方案 > 在 perl 中读取日志文件并在方括号中找到值

问题描述

我有一个logfile.txt包含某个测试用例的执行日志。该文件的示例如下所示。虽然它有许多其他的行,但为了简单起见,我已经删除了它们。

在此logfile.txt,我的最终目标是在最后一行的方括号内获取十六进制值。

我已经编写了一个示例代码PERL来搜索最后一行并打印,但我无法制定正则表达式来获得所需的值。

我的代码:

#!/usr/bin/perl

my $logfile = "/path/to/logfile.txt";
open ( IN1 , $logfile) or die "Cannot find the file $logfile \n";
while (<IN1>)
    {
        chomp ($_);
        print $_ if ($_ =~ m/The job has completed/i);
    }
close (IN1);

输入

   > cat logfile.txt

Waiting for the completion of job..
.
.
.
.
.


The job has completed, returning [0x0]

输出

0x0

标签: regexperl

解决方案


像这样的东西:

#!/usr/bin/perl

use strict;
use warnings;

open my $log_fh, '<', 'logfile.txt' or die $!;

while (<$log_fh>) {
  print $1 if /The job has completed.+\[(.+)\]/;
}

我使用括号 ( (...)) 来“捕获”出现在[和之间的任何内容]。当正则表达式匹配时,捕获的文本将存储在$1.

请注意,我还更新了您的代码以使用更现代的习惯用法来打开文件。我a)使用词法文件句柄,b)使用三参数版本open()和c)检查返回值open()并在程序失败时终止程序。


推荐阅读