はじめに
この連載では、UNIX系OSをコマンドライン上から効率よく利用するために知っておくべきテクニックや、便利な小技を紹介していきます。
今回は「ファイル・ファイル内容の検索」に関するテクニックを紹介します。
前回の記事
対象読者
- UNIX系OSコマンドを一通り利用したことがある方
- 正規表現を利用したことがある方
- 何らかのプログラミング経験がある方
動作確認環境
- Linux(Debian etch/Fedora 9)
- FreeBSD 6.1
- Cygwin 1.5.X
なるべくUNIX系OS一般に当てはまるよう解説するので、特に記述がない場合は、Mac OS X、Red Hat Linux上でも動作します。シェルに関しては、bash(Bourne-Again Shell 2および3)を想定しています。
テキストファイルを検索する(grepコマンド)
grep
は、ファイル内から指定した文字列に一致する内容を含む行を検索するコマンドです。文字列には正規表現を指定することも可能です。
$ grep[オプション][検索文字列][ファイル名]
デフォルトでは指定した文字列と一致する部分が見つかった行を表示します。代表的なオプションには、次のようなものがあります。
オプション | 機能 |
---|---|
-i | 大文字と小文字を区別しない |
-l | パターンに一致した行を含むファイル名だけを出力する |
-n | パターンに一致した行のファイル内での行番号を表示する |
-v | パターンに一致しない行を表示する |
grep 2.5以降の場合、次のオプションも利用可能です。
オプション | 機能 |
---|---|
--color | 一致文字列に色を付ける事ができる |
-o(--only-matching) | 一致した文字列だけを出力する |
-r | 特定ディレクトリ以下を再帰的に検索する |
grep
コマンドを利用した例を2つ紹介します。
複数の検索文字を指定して検索(OR検索)する
文字列「aomori」を含む行と文字列「yamanashi」を含む行を、「fruits.txt」ファイルから抜き出します。
$ cat fruits.txt 1001,unshu-mikan,wakayama 1002,apple,aomori 1003,japanese pear,chiba 1004,grape,yamanashi 1005,peach,yamanashi $ grep -e "aomori" -e "yamanashi" fruits.txt 1002,apple,aomori 1004,grape,yamanashi 1005,peach,yamanashi
「-e」オプションは、複数個のパターンを指定するときに使います。なお、次のような指定をすることも可能です。
$ grep "aomori\|yamanashi" fruits.txt
「|
(パイプ)」の前に「\
(バックスラッシュ)」を入れないとOR検索にならないので注意してください。
複数の検索文字を指定して検索する(AND検索)
grep
コマンドで、AND条件を指定する場合は、シェルスクリプトのパイプ機能を使って、2つのgrep
コマンドを結びつけます。
$ grep "yamanashi" fruits.txt | grep "peach" 1005,peach,yamanashi
上記の例を実行すると、ファイル内の文字列「yamanashi」と文字列「peach」が両方含まれる行を取得できます。