在perl中按不带数组的相反顺序搜索段落

在perl中按不带数组的相反顺序搜索段落,perl,Perl,我有一个日志文件,其中的错误将在行首提到错误,下一行将有关于错误的详细文本。我希望以相反的顺序搜索错误,以便找到最后一个错误并打印下一行或将该行复制到变量 在shell中,我可以尝试下面的命令,这将帮助我实现同样的目标。有人能给我一个等价的perl代码吗 grep -A2 ERROR sapinst.log | tail -2 因为日志文件将是巨大的~5000多行,所以我不想将其存储在数组中。您的文件大小非常小,perl非常快,所以我不会太担心逆序。这个小程序从您在命令行或标准输入中指定的文件

我有一个日志文件,其中的错误将在行首提到错误,下一行将有关于错误的详细文本。我希望以相反的顺序搜索错误,以便找到最后一个错误并打印下一行或将该行复制到变量

在shell中,我可以尝试下面的命令,这将帮助我实现同样的目标。有人能给我一个等价的perl代码吗

grep -A2 ERROR sapinst.log | tail -2

因为日志文件将是巨大的~5000多行,所以我不想将其存储在数组中。

您的文件大小非常小,perl非常快,所以我不会太担心逆序。这个小程序从您在命令行或标准输入中指定的文件中读取输入行(如果您未指定),跳过行直到发现错误,然后打印该行和下一行:

#!perl

while( <> ) {
    next unless /ERROR/;
    print;
    print scalar <>;
    }
如果您最近有足够多的perl,您可以使用更安全的:


您可以使用,但您必须记住每一行,然后检查前一行是否有错误,从而完成相同的任务。对于数据大小而言,好处可能并不明显。如果简单的解决方案速度不够快,那么是时候让它变得更漂亮了,但不是在那之前。

您的文件大小非常小,perl非常快,所以我不会太担心颠倒顺序。这个小程序从您在命令行或标准输入中指定的文件中读取输入行(如果您未指定),跳过行直到发现错误,然后打印该行和下一行:

#!perl

while( <> ) {
    next unless /ERROR/;
    print;
    print scalar <>;
    }
如果您最近有足够多的perl,您可以使用更安全的:


您可以使用,但您必须记住每一行,然后检查前一行是否有错误,从而完成相同的任务。对于数据大小而言,好处可能并不明显。如果简单的解决方案速度不够快,那么是时候让它变得更漂亮了,但在那之前就不行了。

还要看看你的编辑器是否可以加载日志文件,它还不是很大:为什么不直接使用grep呢?上面的grep命令是一个shell命令,我不想在我的perl程序中使用shell命令。还要看看你的编辑器是否可以加载日志文件,它还不是很大:为什么不直接使用grep呢?上面的grep命令是一个shell命令,我不想在我的perl程序中使用shell命令。
use v5.22;

my( $error_line, $next_line );
while( <<>> ) {
    next unless /ERROR/;
    $error_line = $_;
    $next_line = scalar <<>>;
    }

print $error_line, $next_line;