grepで検索、ことはじめ
翻訳校正:原井彰弘
grepは素晴らしいテキスト検索ツールで、テキストであるものはすべて検索することが可能だ。ここではgrepの使い方をお見せしよう。
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は簡単に使える。一度コツさえつかんでしまえば、さらに多くの利用方法を発見できるだろう。
- 1人の推薦記事
- 2人がクリップ
-
ソーシャルブックマーク(-)
- トラックバック(0)
- 今日のトップ記事
- 2日前
- 4日前
- 6日前
- 7日前
- ホワイトペーパー
- 読者投票
- 話題のタグ
MS、Vistaとの互換性をチェックできる「Compatibility Center」リリースへ
「似非」SOAを見破る10の方法
Firefox 3のアドオンやテーマ管理を容易にする
openSUSE 11.0を試してみた
フォトレポート:世界各国の優秀な技術者がパリに集結--Imagine Cup 2008世界大会
バッチ処理でデータベース活用:4つの課題と5つの解決ポイント
Rubyでどう書く?:RubyでWord文書を作成する
ZDNet Japan Green IT
「未来の、その先」をどう提言していくか
DELL連載第4回〜「Microsoft System Center」
今知るべき仮想化情報
Techno Exchange