※ ChatGPTを利用し、要約された質問です(原文:コマンドライン引数で正規表現を指定したい)
コマンドライン引数で正規表現を指定する方法
このQ&Aのポイント
Perlのコマンドライン引数を使用して正規表現を指定する方法を紹介します。
コマンドライン引数から正規表現を読み込む際にエスケープが必要な場合の方法を解説します。
具体的なコード例として、perl grep.plコマンドを使って正規表現を指定する手順を説明します。
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}の部分が機能しません。
コマンドライン引数から正規表現を指定するにはどうしたらよいでしょうか。
お礼
ありがとうございます。できました。shellについてもっと知りたいです。