2012-02-17 7 views
4

は、私は、ファイルxx.txtを持っており、それがPerlで一致する文字列の上にn行を読み込む方法は?

1 I am here 

2 to work in 

3 Perl for writing 

4 a script for 

5 myself 

データが含まれている私は、文字列のスクリプトを検索すると私は何をすべき、それ以上の3つの 行を表示したいとします?と言いますか

答えて

8

印刷バッファーとして配列を使用できます。

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/; 
} 
+0

ここにファイルハンドラはありますか? – kanwarpal

+0

私は一致する単語の行番号を知っていません....問題をthats ...だから私は何をすべきですか? – kanwarpal

+0

'DATA'をスクリプト内で使用して、スクリプト内の' __DATA__'タグ以下のデータを参照することができます。通常のファイルハンドルで置き換えることも、 '<>'を使ってstdinや '@ ARGV'を使うこともできます。それはすべてあなたがしようとしていることに依存します。 – TLP

関連する問題