コマンドライン引数で正規表現を指定したい
Perlでgrep -Aのようなことがしたいです。
---------------grep.pl-------------------------------
use strict;
use warnings;
#コマンドライン引数の確認
if(@ARGV != 3){
die "USAGE: \0 [num] [regex] [file]";
}
#数字の読み込み
my $num = $ARGV[0];
#正規表現の読み込み
my $regex = qr/$ARGV[1]/;
#ファイル名の読み込み
my $file = $ARGV[2];
#該当行を保存する配列
my @lines = ();
open my $fh, '<', "$file" or die "$!";
my @file = <$fh>;
close $fh;
for(my $i=0; $i<@file; $i++){
if($file[$i] =~ /$regex/){
push @lines, $file[$i];
for(my $j=1; $j<=$num; $j++){
if($i+$j < @file){
if($file[$i+$j] !~ /$regex/){
push @lines, $file[$i+$j];
}else{
last;
}
}else{
last;
}
}
}
}
foreach my $item (@lines){
print $item;
}
-------------------------------------------------
ところが、正規表現がうまく読み込めません。
perl grep.pl 2 \d{4}\/\d{2}\d{2} test.txt
などとしても、\d{4}\/\d{2}\d{2}の部分が機能しません。
コマンドライン引数から正規表現を指定するにはどうしたらよいでしょうか。
お礼
回答ありがとうございます。 試してみたのですが、EUC-JPのファイルで日本語含まれているもので grepしたところ、マッチ行数が一致しない4-5行ずれている現象がおきています。 タグジャンプさせたいので、フルパスと行数が表示できる文字コード自動識別のgrepってありますか?