如何在perl中读取匹配字符串上方的n行?

如何在perl中读取匹配字符串上方的n行?,perl,scripting,Perl,Scripting,假设我有一个文件xx.txt,其中包含数据 1 I am here 2 to work in 3 Perl for writing 4 a script for 5 myself 假设我要搜索字符串脚本并显示三个 上面的行,我应该怎么做?您可以使用数组作为打印缓冲区 my @array; while (<DATA>) { push @array, $_; shift @array if @array > 4; print @array if

假设我有一个文件xx.txt,其中包含数据

1 I am here

2 to work in 

3 Perl for writing

4 a script for 

5 myself
假设我要搜索字符串脚本并显示三个
上面的行,我应该怎么做?

您可以使用数组作为打印缓冲区

my @array;
while (<DATA>) {
    push @array, $_;
    shift @array if @array > 4;
    print @array if /script/;
}


__DATA__
1 I am here
2 to work in 
3 Perl for writing
4 a script for 
5 myself
如果
grep
不是选项(例如,您在Windows上),则使用perl一行程序:

如果它位于脚本中,则只需提供自己的文件句柄:

my @array;
open my $fh, '<', "xx.txt" or die $!

while (<$fh>) {
    push @array, $_;
    shift @array if @array > 4;
    print @array if /script/;
}
my@array;

打开我的$fh,'这里的数据是一个文件处理程序吗?我不知道要匹配的字的行号。。。。这就是问题所在。。那么我该怎么办呢?
DATA
可以在脚本中用来引用脚本中
\uuuu DATA\uuuu
标记下面的数据。您可以将其替换为常规文件句柄,也可以使用
来使用stdin或
@ARGV
。这一切都取决于您试图做什么。我在第4行和第8行遇到语法错误,而loopone thing TLP如果我想将数组内容存储到变量中,我应该怎么做?
perl -nwe 'push @a, $_; shift @a if @a > 4; print @a if /script/' xx.txt
my @array;
open my $fh, '<', "xx.txt" or die $!

while (<$fh>) {
    push @array, $_;
    shift @array if @array > 4;
    print @array if /script/;
}