grepで検索、ことはじめ

文:Vincent Danen(TechRepublic) 翻訳校正:原井彰弘
2007-12-25 15:00:00
  • このエントリーをはてなブックマークに追加

 grepは素晴らしいテキスト検索ツールだ。grepを使えば、ファイルに含まれているテキストでも、あるコマンドが出力したテキストでも、テキストであるものはすべて検索することが可能だ。また、grepでは単純な文字列のほかに正規表現を用いた検索もできるほか、利便性を考慮してさまざまな出力形式が用意されている。

 たとえば、sshdが動作しているかどうかを調べるには、次のように調べるだろう。

$ ps ax | grep sshd

 この例では、パイプを用いてps axの出力をgrepの入力に接続しており、文字列sshdに一致する行がすべて出力される。この場合、grepはもちろん自分自身のプロセスも同じように出力してしまう。そこで、grepをもう一度実行し、文字列grepが含まれていないものを出力するようにしよう。

$ ps ax | grep sshd | grep -v grep

 -vオプションを用いると、マッチを反転させて、マッチしなかった行のみをプリントアウトさせることが可能なのである。

 マッチした行数のみ必要であれば、以下のように-cオプションを追加すればよい。

$ ps ax | grep sshd | grep -v grep -c

5

 こうすることで、sshdがいくつ見つかったかが分かる。これはスクリプト内で使えるかもしれない。

 grepの出力で、マッチした文字列をハイライト表示するには、--colorオプションを使用する。また、grepはファイルの内容も同様に検索することが可能だ。grepにワイルドカードやファイルのリストを渡せば、それらのファイルの内容を検索してくれる。もし再帰的に検索を行いたい場合には、次のように-Rオプションを指定する。

# grep --color -R apache /etc/*

 出力にはコンテキストを追加することも可能だ。たとえば、マッチした部分とその前後一行ずつも表示したければ、-Cオプションを用いて次のように記述できる。

# grep --color -C 1 -R apache /etc/*

 また、文字列apacheを再帰的に検索したいが、(マッチした文字列そのものではなく)マッチしたファイルのみをプリントアウトしたいといった場合には、以下のように記述する。

# grep -lR apache /etc/*

 さらに、拡張正規表現を用いたい場合には、-Eオプションを使用するか、もしくはgrepの代わりにegrepを呼び出せばよい。

# egrep -l -R '[Aa]pache$' /etc/*

 上記の例を実行すると、apacheもしくはApacheで終了する行が含まれているファイルが一覧で返される。

 grepは素晴らしいツールであり、テキストファイルやその他の出力から文字列を検索するのに最適である。grepは簡単に使える。一度コツさえつかんでしまえば、さらに多くの利用方法を発見できるだろう。

  • 新着記事
  • 特集
  • ブログ
このサイトでは、利用状況の把握や広告配信などのために、Cookieなどを使用してアクセスデータを取得・利用しています。 これ以降ページを遷移した場合、Cookieなどの設定や使用に同意したことになります。
Cookieなどの設定や使用の詳細、オプトアウトについては詳細をご覧ください。
[ 閉じる ]