grepで大量の条件がある場合の対処方法
記事の更新日:2026/09/30 評価を加筆 1.概要 grepで抽出処理を良く実行します。条件が1個や2個ならば良いのですが、大量の条件がある場合にどうやって実現すると良いか悩みました。forのループで処理できるのはわかるのですが、効率が悪いので方式を検討しました。その内容を記述します。 条件が1つの場合: grep 0001 test.file 条件が2つの場合: grep -e 0001 -e 0002 test.file 条件が多数の場合: grep -e 0001 -e 0002 -e 0003 -e 0004 -e 0005 ... -e 1000 test.file 更に条件が多いと: Argument list too longとなってしまう 私の評価は以下の通りです。 (1) grepで多数の条件設定が必要な場合、grep -f オプションを利用する (2) -f オプションを利用すると正規表現を利用することは難しい (3) その理由は正規表現で冗長となり、メモリ利用料が増加、制限超えと思われる (4) grep以外の手段を利用する。しかし、良い代替品は見つからない 2.詳細 (1) 普通のやり方 forのループを作成して、条件の文字列を作ります( cond.txt )。 条件文字列作成のforのループは文字列を検索しないので効率には影響しません。 -e 0001 -e 0002 -e 0003 -e 0004 -e 0005 ... -e 1000 調べたい対象ファイルをtest.fileとします。 COND=$(cat cond.txt) grep ${COND} test.file (2) grepで非常に大量の条件がある場合の対処方法 実際にgrepで大量のパラメータを設定してみると エラーメッセージが、「Argument list too long」と表示されてしまいます。 調べてみるとエラーの条件が想定したものと異なりました。その内容を記述します。 (a) パラメータが長すぎる STR="-e 100001 -e 100002 -e 100003 -e 100004 -e 100005 ... -e 300000" を作成して、下記grepを実行すると「Argument list too long」のエラーとなりま...