#!/usr/bin/perl ############################## #     初期設定     # ############################## ##正規表現化を解消 ##"で始まる行は、終わりの"を探すロジックはそのままに、 ## .=の部分を修理することで複数行での検索を解消する ##(の手前までで検索するようなロジックを入れる ## このとき、-2.txtみたいな名前にして、diffできるようにする ##https://gishiko.net/lab/3.txt ###########ここまで########### #途中から再開する仕組み $skip_cnt = $ARGV[0]; #カレントディレクトリを取得 use Cwd; $pwd_full = Cwd::getcwd(); print "ディレクトリのフルパスは" . $pwd_full . "です\n"; #カレントディレクトリの<末端>を切り出し $pwd = $pwd_full; $pwd =~ s/.*\/(.*?)$/$1/; print "ディレクトリのなまえは" . $pwd . "です\n"; #結果保存用にホームディレクトリのwk_gskの<末端>.txtを書き込みオープン $savefile = $ENV{HOME} . "/wk_gsk/$pwd.txt"; print "$savefile に保存しようと思います\n"; if (!open(NOTE, ">>", "$savefile")) { die("cannnot open savefile"); } flock(NOTE, 2); #調査対象がリスト化されたファイルを読み込みオープン $readfile = $ENV{HOME} . "/wk_gsk/list.txt"; open(IN, "<", "$readfile") or die("cannnot open readfile"); #変数を初期化。調査対象の各々に対して while($line = readline IN){ if ($skip_cnt > 0){ $skip_cnt--; next; } chomp $line; ## "で始まる行だったら if ($line =~ /^"/){ print "始まりの\"を発見した\n"; ## フラグを立てて、 $multiline = 1; ## バッファに待避して、 ## $multiline_contents .= $line . "[\\\s\\\S]*?"; $line =~ s/^"//; $multiline_contents .= $line . " "; ## 次のループを回す next; } ## フラグが立っていて if ($multiline == 1){ print "複数行モードで起動\n"; ## "で終わる行じゃなかったら if ($line !~ /"$/){ ## バッファに待避して、 ## $multiline_contents .= $line . "[\s\S]*?"; $multiline_contents .= $line . " "; ## 次のループを回す next; ## "で終わる行だったら }elsif($line =~ /"$/){ ## バッファと結合して print "終わりの\"を発見した\n"; $line =~ s/"$//; $multiline_contents .= $line; ## バッファを入れ替える(以降の処理で使用可能な形にする) ($multiline_contents, $line)=($line, $multiline_contents); ## フラグを折って下に進める $multiline_contents = ""; $multiline = ""; } } ## ()とかのメタ文字をエスケープする処理 print "処理前 $line \n"; # $line = quotemeta $line; $line =~ s/(\\|\^|\.|\$|\*|\?|\||\(|\)|\[|\]|\{|\}|\;)/\\$1/g; print "処理後 $line \n"; ## やたらな空白に備える。空白と空白の繰り返しを正規表現として渡す ## $line =~ s/ +/ \+/g; $line =~ s/ +/ \*/g; @grepresult = ""; # grep結果を格納 $grepresult_lines = ""; # grep結果の行数を格納 $writeline = ""; # 書き込む内容 #調査を実施 ##このときに正規表現を使用可能とするオプションを付加する ##プリン美味しい print "発行したコマンド grep -PrIn \\\"$line\\\" *\n"; @grepresult = `grep -PrIn \"$line\" *`; #結果の行数を取得 $grepresult_lines = @grepresult; if ($grepresult_lines != 0) { #結果が0行でない場合に○を $writeline = join(',', @grepresult); $writeline =~ s/(\r|\n)//g; $writeline = "○," . $writeline . "\n"; $writeline = $line . "○" . "\n"; print NOTE $writeline; } else { #結果が0行だった場合に−を $writeline = $line . "−" . "\n"; print NOTE $writeline; } } #ファイルを閉じる close(IN); flock(NOTE, 8); close(NOTE);