動かざることバグの如し

近づきたいよ 君の理想に

Linuxで1行に特定の2単語を含むファイルを検索したい

環境

Linuxで特定のディレクトリ以下のファイルの中身に「apple」と「banana」を同時に含む行が存在するファイルを検索したい

# ok
apple banana

# ok
banana apple tanuki

# ng
apple
banana

コマンド

その要件を叶えてくれるコマンドが以下

grep -rl 'apple.*banana\|banana.*apple' /path/to/directory
  • r: これは再帰的に検索するためのフラグで、指定したディレクトリとそのすべてのサブディレクトリ内のファイルを検索します。
  • l: これはファイル名のみを出力するフラグで、一致する行の内容ではなく、一致が見つかったファイルの名前だけを表示します。
  • 'apple.banana|banana.apple': これは正規表現パターンで、「apple」と「banana」が同じ行にあるかどうかを検索します。ここで .* は任意の文字列(ゼロ文字以上)を表し、| はOR演算子を表します。つまり、'apple'の後に何か文字列があり、それが'banana'に続くパターンまたはその逆パターンを探します。