grep - ファイルにおけるパターンの検索


grep はファイル、または標準入力から指定した文字列を含む行を抜き出し、標準出力に出力します。大変便利です。

% grep [pattern] [filename]

[pattern] の部分には正規表現が使えます。 UNIX/基礎知識/正規表現をみてください。また、

% cat [filename] | grep [pattern]

のようにパイプを使用することもできます。

複数のファイルを複数指定することもできます。

% grep [pattern] *

この場合は

filename1:マッチした行の文字列
filename1:マッチした行の文字列
filename1:マッチした行の文字列
filename1:マッチした行の文字列
filename2:マッチした行の文字列
filename2:マッチした行の文字列
filename3:マッチした行の文字列

のようにファイル名が行の頭に付加されて出力されます。

以下 /usr/local/bin/grep のオプションを説明します(バージョンの新しいやつってことです)。

指定したパターンを含まない行を抜き出したい場合は、

% grep -v [pattern] [filename] 

のように -v オプションを指定します。 また、サブディレクトリ以下も再帰的に検索したい場合は、

% grep -r [pattern] [dirname] 

のように -r オプションを指定することで可能です。 また、マッチしたファイル名のみを表示したい場合は、

% grep -l [pattern] * 

のように -l (エル) オプションをつけます。 また、逆にマッチしなかったファイル名を表示したい場合は、

% grep -L [pattern] *

のように -L オプションを指定します。 また指定したパターンを単語として含む行を抜き出したい場合は、

% grep -w [pattern] [filename] 

のように -w オプションを指定します。 また、指定したパターンそのものしかない行を抜き出したい場合は、

% grep -x [pattern] [filename]

のように -x オプションを指定します。 また大文字と小文字を区別しないで検索したい場合は、

% grep -i [pattern] [filename] 

のように -i オプションを指定します。またマッチした総行数を表示したい場合は、

% grep -c [pattern] [filename]

のように -c オプションをつけます。これは wc コマンドを使用してもいいと思います。また、行番号を付加して表示したい場合は、

% grep -n [pattern] [filename]

のように -n オプションをつけます。

11:マッチした行の文字列
29:マッチした行の文字列
78:マッチした行の文字列

のように表示されます。自分は -n オプションはよく使用します。

また、

% grep -F

のように -F オプションを使用すると、[pattern] に正規表現を使用できないかわりに、動作が早くなります。 これは、

% fgrep

と同じものです。Fast grep です。

また、

% grep -E

のように -E オプションを使用すると、[pattern] に % man -s 5 regexp で見られるような完全な正規表現を使用できるようになります。 これは、

% egrep

とほぼ同じです。Expression grep です。

オプションをまとめておきます。

-v指定した文字列を含まない行を表示
-rサブディレクトリ以下も再帰的に検索
-lマッチしたファイル名のみを表示
-Lマッチしなかったファイル名のみを表示
-wパターンを単語として検索
-x完全マッチした行を出力
-i大文字と小文字を区別しないで検索
-cマッチした総行数を表示
-n行番号を付加して表示
-F正規表現を使用できない grep 。Fast grep
-E完全な正規表現を使用できる grep 。Expression grep

自分はよく

% find | xargs grep -n [pattern]

としてカレントディレクトリ以下のファイルの内容すべてを検索したりします。


xrea