perl - 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/);
正在打印整个文件内容。不知道如何取出包含Sum
和PC
关键字的行。这样我就可以10
使用正则表达式获得价值。
我可以使用以下命令取出 Sum 值:
$sum = qx/more $file | grep -i 'Sum' | grep 'PC' | awk -F " " '{print \$3}'/;
但是想使用 Perl 脚本本身来解决这个问题。
解决方案
逐行阅读。捕获数字并仅输出捕获的部分:
while (<>) { say $1 if /Sum: ([0-9]+)/ }
推荐阅读
- angularjs - 发出补丁请求时出错
- jquery - 滴是如何做这个 div 动画的?
- javascript - jQuery HTML 验证不适用于操作的 DOM 元素
- haskell - 有没有像`>>`这样的标准函数,但返回第一个操作数的结果?
- kubernetes - Kubelet 在启动时失败:无法从输出中检测时钟速度:“”
- java - REFER 方法 - JAIN SIP API - JAVA - 呼叫转移
- postgresql-9.4 - 在 postgresql 中转换为日期的 case 语句
- c# - 从 startup.cs 检查令牌有效性
- java - java:将字符串转换为希腊字符
- python - Python Flask:单击通过单击另一个按钮呈现的按钮