regex - 在 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
解决方案
像这样的东西:
#!/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()
并在程序失败时终止程序。
推荐阅读
- c++ - 在 CLion 中设置 OpenMP 项目 MacOS Mojave
- powershell - 运行 .exe 以获取字符串输出不会保存到字符串变量
- python - 列表中元素的索引
- python - 当我们调用一个类时会发生什么?
- python - 如何将 python 模块和数据存储在目录中,并导入该模块以访问数据
- corda - net.corda.core.CordaRuntimeException:CollectSignaturesFlow 的发起者必须准确传递签署交易所需的会话
- javascript - 单击按钮并从用户那里获取输入
- gremlin - 在 gremlin 查询中显示特定组织的员工列表及其当前状态
- python-2.7 - 找到将打印出序列 1,2,...,10 的 X 的值
- c++ - 自定义 C++ 字符串类