perl – 如何在特定时间之后从日志文件中打印行

perl – 如何在特定时间之后从日志文件中打印行,第1张

概述我想打印所有行,这些行可以说是在perl脚本内perl的localtime函数返回值之后发生的.我试过以下的东西: my $timestamp = localtime();open(CMD,'-|','cat xyz.log | grep -A1000 \$timestamp' || die ('Could not open');while (defined(my $line=<CMD>)){ 我想打印所有行,这些行可以说是在perl脚本内perl的localtime函数返回值之后发生的.我试过以下的东西:

my $timestamp = localtime();open(CMD,'-|','cat xyz.log | grep -A1000 $timestamp' || dIE ('Could not open');while (defined(my $line=<CMD>)){    print $line;}

如果我用xyz.log中的actaul time组件替换cat命令中的$timestamp,那么它会打印行,但不打印$timestamp变量.

有没有其他方法可以打印日志文件中当前时间之后发生的行或者我如何改进上述命令?

解决方法 永远不会在Perl中评估您的$timestamp,因为它只出现在单引号中.但为什么要出来shell以匹配字符串并处理文件? Perl对此更好.

这是一个直接的方法,然后是一个基本的方法.第二个示例中显示了完整脚本.

读取文件,直到到达带有模式的行,然后在该点退出循环.下次访问该文件句柄时,您将进入下一行,并可以在另一个循环中开始打印.

while (<$fh>) { last if /$timestamp/ }print while <$fh>;

这将打印出文件的一部分,该文件的一部分位于其中包含$timestamp的行之后的行.如果更具体,请调整与时间戳完全匹配的方式.

或者 – 当行与时间戳匹配时设置标志,如果设置了标志则打印.

use warnings 'all';use strict;my $timestamp = localtime();my $logile = 'xyz.log';open my $fh,'<',$logfile or dIE "Can't open $logfile: $!";my $mark = 0;while (<$fh>) {    if (not $mark) {         $mark = 1 if /$timestamp/;    }    else { print }}close $fh;
总结

以上是内存溢出为你收集整理的perl – 如何在特定时间之后从日志文件中打印行全部内容,希望文章能够帮你解决perl – 如何在特定时间之后从日志文件中打印行所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1239222.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存