grep コマンド
目的
ファイルからパターンを検索します。
構文
grep [ -E | -F ] [ -i ] [ -h ] [ -H ] [ -L ] [ -r | -R ] [ -s ][ -u ] [ -v ] [ -w ] [ -x ] [ -y ] [ [ [ -b ] [ -n ] ] | [ -c | -l | -q ] ] [ -p [ Separator ] ] { [ -e PatternList ... ] [ -f PatternFile ... ] | PatternList ... } [ File ... ]
説明
grep コマンドは、Pattern パラメーターで指定されたパターンを検索し、一致する各行を標準出力に書き出します。パターンは、ed コマンドまたは egrep コマンドのスタイルの正規表現に限定されます。 grep コマンドは、コンパクトな決定論的でないアルゴリズムを使います。
File パラメーター内で複数の名前を指定すると、grep コマンドは一致した行が入っているファイルの名前を表示します。 シェルに対して特別な意味を持つ文字 ($、*、[、|、^、(、)、¥) は、 Pattern パラメーター内では引用符で囲まなければなりません。 Pattern パラメーターが単純な文字列でない場合、 通常はパターン全体を単一引用符で囲まなければなりません。 [a-z] などの式において、- (負符号) cml は現在の照合シーケンスに従った 範囲を意味します。 照合シーケンスは文字範囲内で使用する等価クラスを定義できます。 ファイルを指定しなければ、grep は標準入力を想定します。
- 予測できない結果を生ずるので、grep コマンドを スペシャル・ファイル上で実行するのは避けてください。入力行には、NULL 文字を使用しないでください。
- 入力ファイルの終わりには、改行文字を付けてください。
- 改行文字は、正規表現で一致させることはできません。
- 複数のフラグを同時に指定できますが、 フラグの中には他のフラグを指定変更してしまうものがあります。例えば、-l オプションは、他のすべてのフラグよりも優先されます。 -E フラグと -F フラグを指定すると、最後に指定したフラグが優先されます。
フラグ
項目 | 説明 |
---|---|
-b | 各行の前に、その行が見つかったブロック番号を付けます。 このフラグを使用すると、ディスク・ブロック番号をコンテキストで見つけるときに便利です。 -b フラグは、標準入力またはパイプからの入力と一緒には使用できません。 |
-c | 一致した行の数のみを表示します。 |
-E | 拡張正規表現 (ERE) として指定されたものとして、指定された各パターンを扱います。
ERE の NULL 値は各行に一致します。
注: 注: -E フラグの付いた、
grep コマンドは、エラー・メッセージと使用方法メッセージ、
および -s フラグの機能が異なるほかは、
egrep コマンドと同じ機能が実行されます。
|
-e PatternList | 1 つ以上の検索パターンを指定します。このフラグは単純なパターンと同じように機能しますが、パターンが - (負) で始まるときに有効です。パターンは改行文字で区切らなければなりません。NULL パターンは、2 つの隣接する改行文字か、改行文字が後ろに続く引用符 ("¥n) で指定できます。 -E フラグも -F フラグも指定しなければ、各パターンは基本正規表現 (BRE) のように扱われます。複数の -e および -f フラグは、grep によって受け入れられます。 行のマッチング時には、すべての指定されたパターンが使用されますが、評価の順序は指定されません。 |
-F | 指定した各パターンを、正規表現ではなく文字列として扱います。NULL 文字列は各行に一致します。
注: -F フラグを指定した、
grep コマンドは、
fgrep コマンドと同じ機能を実行しますが、
エラー・メッセージと使用方法メッセージおよび、
-s フラグの機能が異なります。
|
-f PatternFile | 検索パターンの入ったファイルを指定します。各パターンは改行文字で区切らなければなりません。 また、空の行は NULL パターンと見なされます。 -E フラグも -F フラグも指定しなければ、各パターンは基本正規表現 (BRE) のように扱われます。 |
-h | マッチング行を含むファイル名がその行に付加されることを防ぎます。 複数のファイルを指定したときに、ファイル名を抑止します。 |
-H | -r または -R オプションが指定されていて、タイプがディレクトリーのファイルを 参照するシンボリック・リンクがコマンド・ラインに指定されている場合は 、grep はそのシンボリック・リンクで参照されるディレクトリーの ファイルと、ファイル階層でその下にあるすべてのファイルを検索します。 |
-i | 比較するときには、大文字と小文字の区別を無視します。 |
項目 | 説明 |
---|---|
-l | 一致する行を持つファイルの名前のみを (一度) 表示します。各ファイル名は、改行文字で区切られます。 標準入力を検索した場合は、パス名 (StandardInput) が戻されます。-l フラグを -c および -n フラグと併用すると、-l フラグのみを指定した場合のように動作します。 |
-L | -r または -R オプションが指定されていて、 タイプがディレクトリーのファイルを参照するシンボリック・リンクがコマンド・ラインに指定されているかまたは ファイル階層の横断中に検出された場合は、grep は、 そのシンボリック・リンクが参照しているディレクトリーのファイルおよびファイル階層でその下にあるすべてのファイルを検索します。 -H と -L の両方が指定されている場合は、 コマンド・ラインの最後に指定されているオプションが有効になります。 |
-n | 各行の前にファイル内の相対行番号を付けます。各ファイルは line 1 から始まり、行カウンターはファイルごとにリセットされます。 |
-p[Separator] | 一致する行を含むパラグラフ全体を表示します。パラグラフは、Separator パラメーターで指定された、 パラグラフ・セパレーターで区切られます。パラグラフ・セパレーターは検索パターンと同じ書式のパターンです。 パラグラフ・セパレーターを含んでいる行は、セパレーターとしてのみ使用され、出力には含まれません。デフォルトのパラグラフ・セパレーターはブランク行となります。 |
-q | 行の一致に関係なく、標準出力への書き出しをすべて抑止します。入力行を選択した場合は、状況 0 を戻して終了します。 -q フラグを -c、-l、-n フラグと 併用すると、-q フラグのみを指定した場合のように動作します。 |
-r | ディレクトリーを反復して検索します。 デフォルトにより、続いてそのディレクトリーへリンクします。 |
-R | ディレクトリーを反復して検索します。 デフォルトでは、そのディレクトリーへのリンクは続きません。 |
-s | 存在しないファイルまたは読み取れないファイルに関して通常出力されるエラー・メッセージを抑止します。他のエラー・メッセージは抑止されません。 |
-u | 出力をバッファーしません。 |
-v | 指定したパターンに一致しない行をすべて表示します。 |
-w | ワードの検索を行います。 |
-x | 指定したパターンに正確に一致し、余分の文字がない行を表示します。 |
-y | 比較を行うときに、大文字と小文字の区別を無視します。 |
PatternList | 検索中に使用される 1 つ以上のパターンを指定します。パターンは -e フラグで指定した場合と同様に扱われます。 |
File | パターンを検索するファイル名を指定します。File 変数が与えられない場合は、標準入力を使用します。 |
終了状況
このコマンドは次の終了値を戻します。
項目 | 説明 |
---|---|
0 | 一致が見つかりました。 |
1 | 一致が見つかりませんでした。 |
>1 | 構文エラーが見つかったか、(一致が見つかったとしても) ファイルにアクセスできませんでした。 |
例
- パターン・マッチング文字 *、^、?、[、]、¥(、¥)、¥{、¥} のいずれかが
入っているパターンを使う場合は、次のように入力します。
これにより、pgm.s 内から英文字で始まるすべての行が表示されます。grep "^[a-zA-Z]" pgm.s
- パターンに一致しないすべての行を表示する場合は、次のように入力します。grep -v "^#" pgm.sこれにより、pgm.s 内で、最初の文字が # (ポンド記号) でないすべての行が表示されます。
- abc 文字列か、xyz 文字列に一致するfile1 ファイル内のすべての行を表示するには、次のように入力します。grep -E "abc|xyz" file1
- test2 ファイル内の、$ (ドル記号) を検索するには、次のように入力します。
シェルが grep コマンドに、¥$ (1 つの円記号とドル記号) を渡すようにするには、¥¥ (2 つの円記号) 文字が必要です。 ¥ (1 つの円記号) は、後ろに続く文字 (この例では $) が正規表現の文字ではなく、通常の文字であることを grep コマンドに伝えます。円記号などのエスケープ文字の使用を避けるには、fgrep コマンドを使用します。grep ¥¥$ test2
- /tmp の中を反復して
検索しながら
IBM
という語を持つファイルを検出するが、ディレクトリーを指す リンクの中の反復検索は行わないのであれば、 次のように入力します。
またはgrep –R IBM /tmp
grep –r -H IBM /tmp
- /tmp の中を反復して
検索しながら
IBM
と いう語を持つファイルを検出するが、リンクの中も反復検索するには、 次のように入力します。
またはgrep –r IBM /tmp
grep -R -L IBM /tmp
ファイル
項目 | 説明 |
---|---|
/usr/bin/grep | grep コマンドが入っています。 |