Linuxのgrepコマンドで複数キーワードをAND検索をする方法

目次

  1. 背景
  2. xargsを使って複数キーワードを検索する
  3. 三つ以上のキーワードを検索したいとき
  4. 正規表現でやる場合
  5. まとめ

背景

こんにちは。 karintomania(@karintozuki)と申します。
Linuxのgrepコマンドで複数キーワードを
AND検索する方法を紹介します。

実はgrepコマンドには、
複数キーワードを検索するようなオプションはなかったんですね。

そこで複数キーワードを検索する方法を二つ紹介します。

xargsを使って複数キーワードを検索する

この方法ではxargsを使います。
fooとbarを含むファイルを検索したいときは以下の通りです。
grep -l foo * |xargs grep -l bar

この方法は二回grepすることで、
以下の処理を実行しています。

  • 最初のgrepでfooを含むファイルを検索する
  • xargsで最初のgrep結果を2回目のgrepに渡す
  • 2回目のgrepでbarを検索する

一つずつ説明します。

grep -l foo *
1つ目のgrepについている-lは検索結果にファイル名のみを表示するオプションです。
fooを含んだファイル名を列挙します。

|xargs grep -l bar
その後に|(パイプ)とxargsを使っています。
これにより2つ目のgrepの検索対象として、1つ目の検索結果を渡します。

三つ以上のキーワードを検索したいとき

grep -l foo * | xargs grep -l bar | xargs grep -l baz
xargs grep以降をつなげてってください。

正規表現でやる場合

正規表現でやるバージョンも書いておきます。
grep -e foo.*bar *

-eは正規表現のオプションです。
ただし、同一行にfoo,barの順番で出現する場合でないとヒットしません。
改行してたりbar fooの順番で出てくるとダメと言うことですね。

順不同の正規表現を書くこともできますが、
それくらいならxargsを使った方がシンプルな気がします。

まとめ

grepで複数キーワードを検索する方法を紹介しました。

お役に立てたなら幸いです。
それでは今日はこの辺で。