検索を最適化する方法は、grep 実装で使用するアルゴリズムによって異なります。egrep の「伝統的な」アルゴリズムは、パターンを決定論的有限オートマトンにコンパイルすることです。それが何かわからなくても、心配しないでください: 重要なことは、コンパイルには少し時間がかかるということですが、一度完了すると非常に高速であり、その速度は探しているパターンの複雑さに依存しません。為に。実際、コンパイルが完了すると、egrep は実際には fgrep よりも高速です。つまり、小さなファイルでは fgrep が最速であり、大きなファイルでは egrep が最速です。
少なくとも、[ef]grep の従来の実装ではこのような状況です。最新の実装のほとんどは適応的で、状況に応じてアルゴリズムを切り替えると思います (たとえば、最新の fgreps は、十分な大きさのファイルに対してコンパイル済みの DFA モードに切り替えると思います)。あなたの実装にとって最速のものを見つけるには、いくつかの時間制限のある実験を実際に試す必要があります。
ただし、いくつかの推奨事項をお伝えできます。まず、検索を複数回実行しないようにします (たとえば、単語ごとに fgrep を実行する)。これは、ファイルを複数回スキャンすることを意味します。第二に、検索する文字列の数を最小限に抑えることについて心配する必要はありません。3 番目に、@Lev の提案を使用-m
して、必要なものが見つかった後に停止させます (ただし、両方の単語を で 1 回検索することになると確信しています-m2
)。