grep コマンド

目的

ファイルの内容をパターンで検索します。

構文

grep [ -E | -F ] [ -i ] [ -h ] [ -s ] [ -v ] [ -w ] [ -x ] [ -y ] [ [ [ -b ] [ -n ] ] | [ -c | -l | -q ] ] [ -p [ Separator ] ] { [ -e PatternList ... ] [ -f PatternFile ... ] | PatternList ... } [ File ... ]

説明

grep コマンドは、Pattern パラメーターで指定されたパターンを検索し、一致する各行を標準出力に書き出します。パターンは、egrep コマンドのスタイルの正規表現に限定されます。 grep コマンドは、コンパクトな決定論的でないアルゴリズムを使います。

File パラメーター内で複数の名前を指定すると、grep コマンドは一致した行が入っているファイルの名前を表示します。シェルに対して特別な意味を持つ文字 ($、 *、[、|、^、(、)、¥) は、Pattern パラメーター内では引用符で囲まなければなりません。 Pattern パラメーターが単純な文字列でない場合、通常はパターン全体を単一引用符で囲まなければなりません。 [a-z] などの式において、- (負符号) cml は現在の照合シーケンスに従った範囲を意味します。照合シーケンスは文字範囲内で使用する等価クラスを定義できます。ファイルを指定しなければ、grep は標準入力を想定します。

注:
  1. 各行は 2048 バイト以内に制限されています。
  2. 現在、パラグラフ (-p フラグの指定) の長さは、5000 文字に限定されています。
  3. 予測できない結果を生ずるので、grep コマンドをスペシャル・ファイル上で実行するのは避けてください。
  4. 入力行には、NULL 文字を使用しないでください。
  5. 入力ファイルは、改行文字で終らなければなりません。
  6. 改行文字は、正規表現で一致させることはできません。
  7. 複数のフラグを同時に指定できますが、フラグの中には他のフラグをオーバーライドしてしまうものがあります。たとえば、-l オプションは、他のすべてのフラグよりも優先されます。 -E フラグと -F フラグを指定すると、最後に指定したフラグが優先されます。

フラグ

-b 各行の前に、その行が見つかったブロック番号を付けます。このフラグを使用すると、ディスク・ブロック番号をコンテキストで見つけるときに便利です。 -b フラグは、標準入力またはパイプからの入力と一緒には使用できません。
-c 一致した行の数のみを表示します。
-E 拡張正規表現 (ERE) として指定されたものとして、指定された各パターンを扱います。 ERE の NULL 値は各行に一致します。

注: -E フラグを指定した grep コマンドは、エラー・メッセージと使用方法メッセージ、および -s フラグの機能が異なるほかは、egrep コマンドと同じです。
-e PatternList 複数の検索パターンを指定します。このフラグは単純なパターンと同じように機能しますが、パターンが - (負) で始まるときに有効です。パターンは改行文字で区切らなければなりません。NULL パターンは、2 つの隣接する改行文字か、改行文字が後ろに続く引用符 ("¥n) で指定できます。 -E フラグも -F フラグも指定しなければ、各パターンは基本正規表現 (BRE) のように扱われます。複数の -e および -f フラグは、grep によって受け入れられます。行のマッチング時には、すべての指定されたパターンが使用されますが、評価の順序の指定は解除されます。
-F 指定した各パターンを、正規表現ではなく文字列として扱います。NULL 文字列は各行に一致します。

注: -F フラグを指定した grep コマンドは、 fgrep コマンドと同じですが、エラー・メッセージと使用方法メッセージ、および -s フラグの機能が異なります。
-f PatternFile 検索パターンの入ったファイルを指定します。各パターンは改行文字で区切らなければなりません。また、空の行は NULL パターンと見なされます。 -E フラグも -F フラグも指定しなければ、各パターンは基本正規表現 (BRE) のように扱われます。
-h マッチング行を含むファイル名がその行に付加されることを防ぎます。複数のファイルを指定したときに、ファイル名を抑止します。
-i 比較するときには、大文字と小文字の区別を無視します。

-l 一致する行を持つファイルの名前のみを (一度) 表示します。各ファイル名は、改行文字で区切られます。標準入力を検索した場合は、パス名 (StandardInput) が戻されます。-l フラグを -c および -n フラグと併用すると、-l フラグのみを指定した場合のように動作します。
-n 各行の前にファイル内の相対行番号を付けます。各ファイルは line 1 から始まり、行カウンターはファイルごとにリセットされます。
-p[Separator] 一致する行を含むパラグラフ全体を表示します。パラグラフは、Separator パラメーターで指定された、パラグラフ・セパレーターで区切られます。パラグラフ・セパレーターは検索パターンと同じ書式のパターンです。パラグラフ・セパレーターを含んでいる行は、セパレーターとしてのみ使用され、出力には含まれません。デフォルトのパラグラフ・セパレーターはブランク行となります。
-q 行の一致に関係なく、標準出力への書き出しをすべて抑止します。入力行を選択した場合は、状況 0 を戻して終了します。 -q フラグを -c-l-n フラグと併用すると、-q フラグのみを指定した場合のように動作します。
-s 存在しないファイルまたは読み取れないファイルに関して通常出力されるエラー・メッセージを抑止します。他のエラー・メッセージは抑止されません。
-v 指定したパターンに一致しない行をすべて表示します。
-w ワードの検索を行います。
-x 指定したパターンに正確に一致し、余分の文字がない行を表示します。
-y 比較を行うときに、大文字と小文字の区別を無視します。
PatternList 検索中に使用される複数のパターンを指定します。パターンは -e フラグで指定した場合と同様に扱われます。
File パターンを検索するファイル名を指定します。File 変数が与えられない場合は、標準入力を使用します。

戻りコード

このコマンドは次の終了値を戻します。

0 一致が見つかりました。
1 一致が見つかりませんでした。
>1 構文エラーが見つかったか、(一致が見つかったとしても) ファイルにアクセスできませんでした。

  1. パターン・マッチング文字 *、^、?、[、]、¥(、¥)、¥{、¥} のいずれかが入っているパターンを使う場合は、次のように入力します。

    grep  "^[a-zA-Z]"  pgm.s 

    これにより、pgm.s 内から英文字で始まるすべての行が表示されます。

  2. パターンに一致しないすべての行を表示する場合は、次のように入力します。
    grep -v "^#" pgm.s
    これにより、pgm.s 内で、最初の文字が # (ポンド記号) でないすべての行が表示されます。
  3. abc 文字列か、 xyz 文字列に一致する file1 ファイル内のすべての行を表示するには、次のように入力します。
    grep -E "abc|xyz" file1
  4. test2 ファイル内の、 $ (ドル記号) を検索するには、次のように入力します。

    grep ¥¥$ test2

    シェルが grep コマンドに、¥$ (1 つの円記号またはバックスラッシュとドル記号) を渡すようにするには、¥¥ (2 つの円記号またはバックスラッシュ) 文字が必要です。¥ (1 つの円記号またはバックスラッシュ) は、後ろに続く文字 (この例では $) が正規表現の文字ではなく、通常の文字であることを grep コマンドに伝えます。円記号 (またはバックスラッシュ) などのエスケープ文字の使用を避けるには、fgrep コマンドを使用します。

関連情報

egrep コマンド、fgrep コマンド