4
は、私は、ファイルxx.txtを持っており、それがPerlで一致する文字列の上にn行を読み込む方法は?
1 I am here
2 to work in
3 Perl for writing
4 a script for
5 myself
データが含まれている私は、文字列のスクリプトを検索すると私は何をすべき、それ以上の3つの 行を表示したいとします?と言いますか
は、私は、ファイルxx.txtを持っており、それがPerlで一致する文字列の上にn行を読み込む方法は?
1 I am here
2 to work in
3 Perl for writing
4 a script for
5 myself
データが含まれている私は、文字列のスクリプトを検索すると私は何をすべき、それ以上の3つの 行を表示したいとします?と言いますか
印刷バッファーとして配列を使用できます。
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
がある場合
grep -B3 script xx.txt
やPerlワンライナーを:あなたは、スタンドアローンとしてこれを使用する場合は
、あなたが代わりにgrep
を使用して検討するかもしれませんオプションではありません(Windowsの場合など):
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/;
}
ここにファイルハンドラはありますか? – kanwarpal
私は一致する単語の行番号を知っていません....問題をthats ...だから私は何をすべきですか? – kanwarpal
'DATA'をスクリプト内で使用して、スクリプト内の' __DATA__'タグ以下のデータを参照することができます。通常のファイルハンドルで置き換えることも、 '<>'を使ってstdinや '@ ARGV'を使うこともできます。それはすべてあなたがしようとしていることに依存します。 – TLP