在 Perl 中,我试图读取一个日志文件,并且只打印在两个特定时间之间具有时间戳的行。时间格式为 hh:mm:ss,这始终是每个日志上的第三个值。例如,我将搜索介于 12:52:33 到 12:59:33 之间的行
我是 Perl 的新手,甚至不知道该采取哪条路线来开始编程。我很确定这将使用某种类型的正则表达式,但对于我的生活,我什至无法开始理解那会是什么。有人可以帮我解决这个问题。
此外,为了使这更困难,我必须使用核心 Perl 模块来执行此操作,因为我的公司不允许我使用任何其他模块,直到它们经过测试和验证不会对脚本可能的任何系统产生不良影响与。。。相互作用。
最佳答案
在伪代码中,你会做这样的事情:
这可能对您的需要来说太高级了,但是 flip-flop operator
..
立即想到这里有用的东西。对于从标准输入读取文件,这是常规模式:
while (my $line = <>)
{
# do stuff...
}
使用
split
可以轻松地将行解析为字段(见 perldoc -f split)。根据格式,您可能需要用制表符或空格分隔行。获得特定字段(包含时间戳)后,您可以使用自定义的正则表达式对其进行检查。阅读 perldoc perlre .
这里有一些可能会让你更接近:
use strict;
use warnings;
use POSIX 'mktime';
my $starttime = mktime(33, 52, 12);
my $endtime = mktime(33, 59, 12);
while (my $line = <>)
{
# split into fields using whitespace as the delimiter
my @fields = split(/\s+/, $line);
# the timestamp is the 3rd field
my $timestamp = $fields[2];
my ($hour, $min, $sec) = split(':', $timestamp);
my $time = mktime($sec, $min, $hour);
next unless ($time < $starttime) .. ($time > $endtime);
print $line;
}
关于regex - 如何使用 Perl 在文件中的两个时间戳之间搜索行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3134882/