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 ... } 
[ -U [ -I ] unicode_hex_notation_pattern ] [ File ... ]

説明

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

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

注:
  1. 予測できない結果を生ずるので、grep コマンドを スペシャル・ファイル上で実行するのは避けてください。 入力行には、NULL 文字を使用しないでください。
  2. 入力ファイルは改行文字で終了する必要があります。
  3. 改行文字が正規表現と一致しません。
  4. 複数のフラグを同時に指定できますが、 フラグの中には他のフラグを指定変更してしまうものがあります。 例えば、-l オプションは、他のすべてのフラグよりも優先されます。 -E フラグと -F フラグを指定すると、最後に指定したフラグが優先されます。

フラグ

表 1. フラグ
項目 説明
-b 各行の前に、その行が見つかったブロック番号を付けます。 このフラグを使用すると、ディスク・ブロック番号をコンテキストで見つけるときに便利です。 -bフラグは、「stdinまたはパイプからの入力では使用できない。
-c 一致した行の数のみを表示します。
-E 指定された各パターンを拡張正規表現 (ERE) として扱います。 ERE の NULL 値は各行に一致します。
注: -E フラグを指定した grep コマンドは、 egrep コマンドと同じですが、エラー・メッセージと使用法メッセージが異なり、 -s フラグの機能が異なる点が異なります。
-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 比較するときには、大文字と小文字の区別を無視します。
-I 指定されたUnicode 16進表記パターンの大まかな一致に基づいて検索を行うことを指定します。 ほとんどの正規表現エンジンは、大文字小文字を区別しないマッチングを唯一の緩やかなマッチングとして提供している。 式エンジンが大文字小文字を区別しないマッチングを唯一の緩やかなマッチングとして提供する場合、式エンジンはASCII文字以外の大文字小文字を区別するUnicode文字の大きな範囲を考慮しなければなりません。
注:'-Iフラグは'-Uフラグと共にのみ使用できる。
-l 一致する行を持つファイルの名前のみを (一度) 表示します。 各ファイル名は、改行文字で区切られます。 標準入力が検索されると、パス名 StandardInput が戻されます。 -lフラグと「-cフラグおよび「-nフラグの組み合わせは、「-lフラグのみのように動作する。
-L -rまたは '-Rオプションが指定されていて、 ディレクトリ型のファイルを参照するシンボリックリンクが コマンドラインで指定されたか、ファイル階層を走査している間に 見つかった場合、'grepコマンドはシンボリックリンクが 参照しているディレクトリのファイルと、それ以降のファイル階層の すべてのファイルを検索する。 -H-L の両方が指定されている場合、コマンド行で最後に指定されたオプションが有効になります。
-n 各行の前にファイル内の相対行番号を付けます。 各ファイルは line 1 から始まり、行カウンターはファイルごとにリセットされます。
-p[区切り文字] マッチした行を含む段落全体を表示します。 パラグラフは、Separator パラメーターで指定された、 パラグラフ・セパレーターで区切られます。パラグラフ・セパレーターは検索パターンと同じ書式のパターンです。 パラグラフ・セパレーターを含んでいる行は、セパレーターとしてのみ使用され、出力には含まれません。 デフォルトのパラグラフ・セパレーターはブランク行となります。
-q 行の一致に関係なく、標準出力への書き出しをすべて抑止します。 入力行を選択した場合は、状況 0 を戻して終了します。 -c-l、および -n フラグを任意に組み合わせた -q フラグは、 -q フラグと同様にのみ動作します。
-r ディレクトリーを反復して検索します。 デフォルトにより、続いてそのディレクトリーへリンクします。
-R ディレクトリーを反復して検索します。 デフォルトでは、そのディレクトリーへのリンクは続きません。
-s 存在しないファイルまたは読めないファイルに対して通常書き込まれるエラー・メッセージを抑制します。 他のエラー・メッセージは抑止されません。
-u -uフラグは出力をバッファリングなしにする。
-U ユニコード16進表記パターン フラグ -U はUnicodeフラグを有効にします。 正規表現ライターは、検索するパターンを指定するのにユニコード文字セットを使わないかもしれない。 また、ユニコードで定義されたコードポイントを、主要な文字言語のすべての文字についてキーボードで入力することは不可能かもしれない。 したがって、 unicode_hex_notation_pattern パターンの値は、文字の Unicode で定義されたコード点の 16 進数表現でなければならない。 例えば、Unicodeで定義されたコードポイントが である文字 𝄞 を表現する場合、 ` U+1D11Eunicode_hex_notation_pattern` の値は、16進 \U0001D11E表記として `0x0000` \x{1D11E}、`0x0001`、または `0x0002` と \u{1D11E}することができます。
注:
  • -Uフラグを持つ'grepコマンドの機能は、'ugrepコマンドの機能と同じである。
  • -Uフラグは、'grepコマンドのレガシーフラグとは機能しない。
-v 指定したパターンに一致しない行をすべて表示します。
-w ワードの検索を行います。
-x 指定したパターンに正確に一致し、余分の文字がない行を表示します。
-y 比較を行うときに、大文字と小文字の区別を無視します。
PatternList 検索中に使用される 1 つ以上のパターンを指定します。 パターンは「-eフラグで指定されたものとして扱われる。
File パターンを検索するファイル名を指定します。 File 変数が与えられない場合は、標準入力を使用します。

終了状況

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

表 2. 終了状況
項目 説明
0 一致が見つかりました。
1 一致が見つかりませんでした。
>1 構文エラーが見つかったか、(一致が見つかったとしても) ファイルにアクセスできませんでした。

  1. パターン・マッチ文字「*, ^, ?, [, ], \(, \), \{,」と「\}」を含むパターンを使うには、次のコマンドを入力する:
    grep  "^[a-zA-Z]"  pgm.s 
    これは、'pgm.sファイルの最初の文字が文字であるすべての行を表示する。
  2. パターンに一致しないすべての行を表示するには、次のコマンドを入力します。
    grep   -v  "^#" pgm.s
    これは、'pgm.sファイルの最初の文字が'#(ポンド記号)でないすべての行を表示する。
  3. file1 ファイル内の、 abc または xyz ストリングに一致するすべての行を表示するには、次のコマンドを入力します。
    grep -E "abc|xyz"  file1
  4. test2ファイル内の「$(ドル記号)を検索するには、次のコマンドを入力する:
    grep \\$ test2
    シェルが \$ (単一円記号、ドル記号) を grep コマンドに渡すように強制するには、 \\ (二重円記号) 文字が必要です。 \ (単一円記号) 文字は、 grep コマンドに対して、後続の文字 (この例では $) を式文字ではなくリテラル文字として扱うように指示します。 円記号などのエスケープ文字の使用を避けるには、fgrep コマンドを使用します。
  5. /tmp を再帰的に検索して、ディレクトリーを指すリンクを繰り返さずに、 IBM という語を持つファイルを見つけるには、次のコマンドを入力します。
    grep –R IBM /tmp

    それとも

    grep –r -H IBM /tmp
  6. /tmp再帰的に検索し、「IBM単語を持つファイルを見つけ、リンクも再帰的に検索するには、次のコマンドを入力する:
    grep –r IBM /tmp

    それとも

    grep -R -L IBM /tmp
  7. ファイル regex_test.txt 内で文字を検索するには 、そのUnicode定義コードポイントは U+6211、16進数表記はです \u6211。次のコマンドを入力してください:
    grep -U "\u6211" regex_test.txt
    複数の文字を検索するには、ユニコードで定義されたコードポイントの16進表現のリストをスペースなしで追加することができます。 たとえば、「regex_test.txtファイル中の「」と「」を検索するには、次のコマンドを入力する:
    grep -U “\u0918\u0930" regex_test.txt
  8. regex_test.txtファイルで検索するコードポイント「U+6200」と「U+6300」の間の文字範囲を指定するには、次のコマンドを入力する:
    grep -U "[\u6200-\u6300]" regex_test.txt
    コードポイント「U+6200」と「U+6300間の文字で、「regex_test.txtファイルで検索する大文字の範囲を指定するには、次のコマンドを入力する:
    grep -U "[\u0000-\U0010FFFF--\p{Lu}]" regex_test.txt
  9. 文字のあいまい検索を行うには、Unicodeで定義されたコードポイントが U+10425 で、16進数表記が である \U00010425文字に対して 𐐥、次のコマンドを入力します:
    grep -U -I "\U00010425" regex_test.txt
  10. ファイル regex_test.txt 内で小数点以下の桁数を持つ数値を検索するには、次のコマンドを入力します:
    grep -U "\p{Nd}" regex_test.txt
    where Nd は、十進数字を持つ数値の Unicode 文字プロパティです。
  11. 日本語の regex_test.txt ファイル内でひらがな文字を検索するには、次のコードを入力してください:
    grep -U "\p{Hiragana}" regex_test.txt

ファイル

表3. ファイル
項目 説明
/usr/bin/grep grep コマンドが入っています。