如何在perl中读取匹配字符串上方的n行?
假设我有一个文件xx.txt,其中包含数据如何在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
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/;
}