Name
grep, egrep, fgrep – print lines matching a pattern
Synopsis
grep PATTERN
grep
Description
grep has searched the named input FILEs (or standard input if no files are named.)を検索する。 または、ファイル名としてハイフンマイナス(-)を1つだけ指定した場合)与えられたPATTERNにマッチする行を探します。 egrep は grep -E と同じで、fgrep は grep -F と同じである。 egrep または fgrep のいずれかとして直接起動することは非推奨だが、それらに依存している歴史的なアプリケーションを変更せずに起動できるようにするために提供されている。
Options
Generic Program Information
–help
これらのコマンドラインのオプションとバグ報告アドレスについて簡単にまとめた使用メッセージを表示して、終了します。
-V, –version 標準出力ストリームに grep のバージョンナンバーを出力します。 このバージョン番号は、すべてのバグレポートに含まれるべきである (下記参照)。
Matcher Selection
-E, –extended-regexp PATTERN を拡張正規表現 (ERE、下記参照) として解釈する。 (EはPOSIXで規定されている) -F, –fixed-strings PATTERNを改行で区切られた固定文字列のリストとして解釈し、そのいずれかをマッチングする。 (G, –basic-regexp PATTERNを基本正規表現(BRE、下記参照)として解釈する。) これはデフォルトである。 -P, –perl-regexp PATTERNをPerlの正規表現として解釈する。 これは非常に実験的なもので、 grep -P は未実装の機能であることを警告することがある。
マッチングコントロール
-e PATTERN, –regexp=PATTERN PATTERN をパターンとして使用します。 これは、複数の検索パターンを指定したり、ハイフン(-)で始まるパターンを保護するために使用できる。(-eはPOSIXで指定されている。) -f FILE, –file=FILE FILEから、1行につき1つのパターンを取得する。 空のファイルは、パターンがゼロであるため、何もマッチしません。 (-f は POSIX で指定されています。) -i, –ignore-case PATTERN と入力ファイルの両方で、大文字と小文字の区別を無視します。 (-i は POSIX で指定されています。) -v, –invert-match マッチングの意味を反転させ、マッチしない行を選択します。 (-v は POSIX で指定されています。) -w, –word-regexp 単語全体を形成するマッチを含む行だけを選択します。 テストは、マッチした部分文字列が行の先頭にあるか、単語以外の構成文字が 前後にあるか、のいずれかであることである。 同様に、行末にあるか、単語でない構成文字が続くかでなければならない。 -x, –line-regexp 行全体に完全に一致するものだけを選択します。 (-x は POSIX で指定されている。) -y
Obsolete synonym for -i.
General Output Control
-c, –count 通常の出力を抑制し、入力ファイルごとに一致した行数を出力する。 v, –invert-match オプション (下記参照) を使用すると、マッチしない行をカウントする。 (-c は POSIX で指定されている。) –color, –colour マッチした (空でない) 文字列、マッチ行、コンテキスト行、ファイル名、行番号、バイトオフセット、 (フィールドとコンテキスト行のグループの) セパレータを、端末にカラー表示するためにエスケープシーケンスで囲みます。 色は,環境変数 GREP_COLORS で定義される。 非推奨の環境変数 GREP_COLOR もまだサポートされているが、その設定には優先順位がない。 WHENは、never、always、rautoのいずれかです。 -L, –files-without-match 通常の出力を抑制し、代わりに通常出力されない各入力ファイルの名前を表示します。 スキャンは、最初のマッチで停止する。 -代わりに、通常出力が印刷されるはずの各入力ファイルの名前を表示する。 スキャンは最初のマッチで停止する。 (-l は POSIX .NET で指定されている) -m NUM, –max-count=NUM NUM 行マッチした時点でファイルの読み込みを停止する。 入力が通常ファイルからの標準入力で、NUM個の一致する行が出力される場合、末尾の文脈行の存在に関係なく、標準入力が終了する前に最後の一致する行の直後に配置されることを保証します。 これにより、呼び出したプロセスが検索を再開することができます。 grep が NUM マッチ行の後で停止すると、末尾のコンテキスト行がすべて出力されます。 c または –count オプションも使用すると、NUM より大きいカウントは出力されません。 vまたは–invert-matchオプションも使用すると、NUM個のマッチしない行を出力した後、grepは停止する。 -o, –only-matching 一致した行の一致した(空でない)部分のみを出力し、そのような部分はそれぞれ別の出力行に出力されます。 -q, –quiet, –silent 標準出力に何も書き出さない。 エラーが検出された場合でも、マッチした行が見つかれば直ちにゼロステータスで終了する。 s または –no-messages オプションも参照。 (-q は POSIX .NET で指定されている) -s, –no-messages 存在しないファイルや読めないファイルについてのエラーメッセージを出さないようにする。 USG -style grep も -q がありませんが、-s オプションは GNU grep のように動作します。 携帯用シェルスクリプトは-qと-sの両方を避け、代わりに標準出力とエラー出力を /dev/nullにリダイレクトすべきです。 (-s は POSIX で指定されている。)
出力行頭文字の制御
-b, –byte-offset 出力行の前に、入力ファイル内の 0 ベースのバイトオフセットを表示する。 o (–only-matching) が指定された場合、マッチング部分のオフセットを表示する。 -H, –with-filename 各マッチに対応するファイル名を出力します。 これは、検索対象が複数のファイルである場合のデフォルトである。 -h, –no-filename 出力にファイル名の接頭辞を付けないようにする。 これは、検索するファイルが1つだけ(または標準入力だけ)の場合のデフォルトである。 –label=LABEL 実際に標準入力から来た入力を、LABELファイルから来た入力として表示する。 これは、zgrep のようなツールを実装するときに特に有用である。 例えば、gzip -cd foo.gz | grep –label=foo -H something のようになる。 H オプションも参照。 -n, –line-number 出力の各行に、入力ファイル中の 1 に基づいた行番号を付加する。 (-n は POSIX .NET で指定されている) -T, –initial-tab 実際の行の内容の最初の文字がタブストップ上にあることを確認し、タブの配置が正常に見えるようにする。 これは、出力を実際の内容に優先させるようなオプションで有用である。 -H、-n、-b。 1つのファイルからの行がすべて同じカラムで始まる確率を上げるために、 行番号とバイトオフセット (存在する場合) を最小限のフィールド幅で表示する。 -u, –unix-byte-offsets Unixスタイルのバイトオフセットを報告する。 このスイッチを使用すると、ファイルがUnixスタイルのテキスト・ファイルであるかのように、つまりCR文字が取り除かれた状態で、grepがバイト・オフセットを報告するようになります。 これにより、Unixマシンでgrepを実行したのと同じ結果が得られます。 このオプションは、-b オプションが使用されていない限り、効果がありません。 -Z, –null ファイル名の後に付く文字の代わりにゼロバイト(ASCIIのNUL文字)を出力します. 例えば、grep -lZout は、各ファイル名の後に、通常の改行の代わりにゼロバイトを出力します。 このオプションは、改行のような通常とは異なる文字を含むファイル名が存在する場合でも、出力を曖昧にしないようにします。 このオプションは、find -print0, perl -0, sort -z, xargs -0 などのコマンドで使用でき、任意のファイル名を処理することができ、改行文字を含むファイル名でも処理できます。
Context Line Control
-A NUM, –after-context=NUM 一致した行の後に NUM 行の末尾コンテキストを表示する。 マッチの連続したグループの間にグループセパレータ (–) を含む行を配置します。 o または –only-matching オプションを指定すると、この機能は無効になり、警告が表示されます。 -B NUM, –before-context=NUM マッチする行の前に、先行するコンテキストを NUM 行出力します。 連続するマッチのグループの間に、グループセパレータ (–) を含む行を挿入する。 o または –only-matching オプションを指定すると、この機能は無効になり、警告が表示される。 -C NUM, -NUM, –context=NUM 出力コンテキストのNUM行を出力する。 連続するマッチのグループの間に、グループセパレータ (–) を含む行を置く。 o または–only-matching オプションを指定すると、この機能は無効になり、警告が出される。
File and Directory Selection
-a, –text バイナリファイルをテキストと同様に処理する。 –binary-files=TYPE ファイルの最初の数バイトがバイナリデータを含んでいることを示す場合、 そのファイルは TYPE タイプであると仮定する。 デフォルトでは、TYPE はバイナリであり、 grep は通常、バイナリファイルにマッチするという 1 行のメッセージを出力するか、マッチしない場合は何もメッセージを出力しない。 TYPEがwithout-matchの場合、grepはバイナリファイルがマッチしないものと見なします。これは-Iオプションと同等です。 TYPE が text の場合、バイナリファイルをテキストと同じように処理します。 警告: grep –binary-files=text はバイナリのゴミを出力するかもしれません。 -D ACTION, –devices=ACTION 入力ファイルがデバイス、FIFO、ソケットである場合、ACTIONを使用して処理します。 デフォルトでは、ACTIONはreadであり、デバイスは通常のファイルと同じようにreadjustされることを意味する。 ACTIONがskipの場合、デバイスは黙ってスキップされる。 -d ACTION, –directories=ACTION 入力ファイルがディレクトリである場合、ACTIONを使用して処理する。 デフォルトでは、ACTIONはreadで、ディレクトリは通常のファイルと同様に読み込まれます。 ACTIONがskipの場合、ディレクトリは黙ってスキップされます。 ACTIONがrecurseの場合、grepは各ディレクトリの下にあるすべてのファイルを再帰的に読み取ります。 –exclude=GLOB ベースネームが GLOB に一致するファイルをスキップします (ワイルドカードを使用します)。 ファイル名グロブは、ワイルドカードとして *、 ? 、および \ を使用できます。 –FILE から読み込んだファイル名グロブのいずれかとベース名が 一致するファイルをスキップします (–exclude の説明に従ってワイルド カード検索を使用します)。 –exclude-dir=DIR パターン DIR に一致するディレクトリを再帰的検索から除外します。 -これは –binary-files=without-match オプションと同等である。 –include=GLOB ベース名が GLOB に一致するファイルのみを検索する (–exclude の説明と同様にワイルドカードを使用する)。 -R, -r, –recursive 各ディレクトリ以下の全てのファイルを再帰的に読み込む; これは -d recurse オプションと等価である。
その他のオプション
–line-buffered 出力にラインバッファリングを使用する。 これはパフォーマンス・ペナルティを引き起こす可能性がある。 -mmap
可能であれば、デフォルトの read(2) システムコールの代わりに、 mmap(2) システムコールを使って入力を読み込むようにする。 状況によっては、-mmap はより良い性能をもたらす。 しかし、-mmap は grep の動作中に入力ファイルが縮小したり、I/O エラーが発生した場合に (コアダンプを含む) 未定義の動作を引き起こすことがあります。
-U, –binary ファイルをバイナリとして扱います。 MS-DOS および MS -Windows では、デフォルトで、grep はファイルから読み込まれた最初の 32KB の内容を見て、ファイルタイプを推測します。 ファイルがテキストファイルであると grep が判断した場合、元のファイルの内容から CR 文字を除去します (^ および $ による正規表現が正しく機能するようにします)。 U を指定すると、この推測が無効になり、すべてのファイルが読み込まれてマッチング機構にそのまま渡されます。ファイルがテキストファイルで各行の末尾に CR/LF ペアがある場合、一部の正規表現が失敗する原因になります。 このオプションは、MS-DOS および MS -Windows 以外のプラットフォームでは効果がありません。 -z, –null-data 入力を一連の行として扱い、各行は改行の代わりにゼロバイト (ASCII の NUL 文字) で終端する。 Z や –null オプションと同様に、このオプションは sort -z のようなコマンドと一緒に使って、 任意のファイル名を処理することができる。
正規表現
正規表現とは、文字列の集合を記述するパターンである。 正規表現は、より小さな式を組み合わせるためにさまざまな演算子を使用して、算術式に類似して構築されます。 「基本」、「拡張」、および「perl」です。 GNU grep では、基本構文と拡張構文の間に利用可能な機能の差はありません。 他の実装では、基本的な正規表現はあまり強力ではありません。 以下の説明は拡張正規表現に適用され、基本正規表現との違いはその後にまとめています。 Perl の正規表現は追加機能を提供し、pcresyntax(3) と pcrepattern(3) で文書化されていますが、すべてのシステムで使用できるとは限りません。 すべての文字と数字を含むほとんどの文字は、それ自身にマッチする正規表現である。
文字クラスとブラケット表現
ブラケット表現は、.で囲まれた文字のリストで、特別な意味を持つメタ文字は、バックスラッシュで前に引用されることがあります。 リストの最初の文字がキャレット ^ である場合、リストにない文字にマッチします。 たとえば、正規表現は数字1文字にマッチします。
ブラケット表現では、範囲表現はハイフンで区切られた2つの文字で構成されます。 これは、ロケールの照合順序と文字セットを使って、その2つの文字の間でソートされる任意の1文字にマッチします。 たとえば、デフォルトのCロケールでは、次のようになります。 多くのロケールでは、文字は辞書順にソートされ、これらのロケールでは、通常、 と等価ではありません;例えば、 と等価かもしれません。 環境変数LC_ALLにC.
を設定することで、Cロケールを使用することができる。最後に、ブラケット表現には、以下のように特定の名前の文字クラスがあらかじめ定義されている。 これらの名称は自明であり、それらは、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 。 ただし、後者はロケールやASCII文字コードに依存するのに対し、前者はロケールや文字セットに依存しない。 (これらのクラス名の括弧はシンボル名の一部であり、括弧式を区切る括弧に加えて含まれなければならないことに注意してください)。 ほとんどのメタキャラクタは、括弧式の中では特別な意味を失います。 リテラル ] を含めるには、リストの最初に置きます。 同様に、リテラル ^ を含めるには、最初以外の場所に置きます。 最後に、リテラル – を含めるには、最後に置きます。
アンカーリング
キャレット ^ とドル記号 $ はメタ文字で、それぞれ行頭と行末の空の文字列にマッチします。
バックスラッシュ文字と特殊表現
\<, \> という記号は、それぞれ単語の先頭と末尾の空白文字列にマッチする。 記号 \b は単語の端にある空文字列にマッチし、単語の端にない場合は空文字列にマッチします。 記号 \w は] と同義語であり、[ ]と同義語です。
繰り返し
正規表現の後には、いくつかの繰り返し演算子のうちの1つを付けることができます。 7119>
*
先行する項目に0回以上マッチします。
+
先行する項目に1回以上マッチします。
{n}
直前の項目にちょうどn回マッチします。
{n,}
直前の項目にn回以上マッチします。
{,m}
直前の項目に最大m回マッチする。
{n,m}
直前の項目に少なくともn回、最大m回マッチする。
連結
二つの正規表現を連結して、得られた正規表現は連結表現とマッチする二つの部分文字列に一致するように作られた任意の文字列とマッチします。
Alternation
2つの正規表現を接尾辞演算子|で結合することができ、結果の正規表現はいずれかの代替表現にマッチする文字列とマッチします。
Precedence
反復は連結より優先され、連結は交互より優先されます。 式全体を括弧で囲むと、これらの優先順位の規則を無効にして部分式を形成することができる。
後方参照と部分式
後方参照 \n (n は1桁) は、正規表現のn番目の括弧付き部分式が前にマッチした部分文字列にマッチします。
基本正規表現と拡張正規表現
基本正規表現では、メタ文字 ?、+、{、 |、( および ) は特別な意味を失います。
従来の egrep は { メタ文字をサポートしておらず、いくつかの egrep 実装は代わりに \{ をサポートしているため、移植スクリプトは grep -E パターンで { を避け、リテラルの { にマッチするように使用する必要があります。 例えば、コマンド grep -E ‘{1’ は、正規表現の構文エラーを報告する代わりに、2 文字の文字列 {1 を検索します。 POSIX.2 は拡張機能としてこの動作を許可しているが、移植可能なスクリプトはこれを避けるべきである。
環境変数
grepの動作は以下の環境変数の影響を受ける。 これらの変数のうち、最初に設定されたものがロケールを指定する。 例えば、LC_ALL が設定されておらず、LC_MESSAGES が topt_BR に設定されている場合、LC_MESSAGES カテゴリにはブラジル・ポルトガル語ロケールが使用されます。 これらの環境変数が設定されていない場合、ロケールカタログがインストールされていない場合、または grep が各国語サポート ( NLS ) でコンパイルされていない場合、C ロケールが使用される。
GREP_OPTIONS この変数は、明示的なオプションの前に置かれるデフォルトオプションを指定します。 例えば、GREP_OPTIONS が ‘–binary-files=without-match –directories=skip’ であれば、 –binary-files=without-match と–directories=skip の二つのオプションが、明示的なオプションより前に指定されているかのように 動作する。 オプションの指定は、空白で区切られます。 バックスラッシュは nextcharacter をエスケープするので、空白やバックスラッシュを含む オプションを指定することができます。 GREP_COLOR この変数は、マッチした(空でない)テキストをハイライトするのに使う色を 指定する。 GREP_COLORSに代わって非推奨となったが、まだサポートされている。 GREP_COLORS の Themt, ms, mc 機能が優先されます。 これは、一致する行(-vコマンドラインオプションが省略された場合は選択行、-vが指定された場合は文脈行)の空でないテキストを強調するために使用する色のみを指定することができます。 デフォルトは 01;31 で、端末のデフォルトの背景に太い赤の前景テキストが表示されます。 GREP_COLORS 出力のさまざまな部分を強調するために使用する色およびその他の属性を指定します。 この値は、コロンで区切られた機能のリストで、デフォルトは ms=01;31:mc=01;31:sl=:cx=:fn=35:ln=32:bn=32:se=36 で、rv および ne 論理型機能は省略されています(すなわち、false)。 sl=
SGR 選択された行全体(すなわち、-v コマンドラインオプションが省略された場合は一致する行、-v が指定された場合は一致しない行)の部分文字列を取得します。
cx=
SGR Substring for whole context lines (すなわち、-v コマンドラインオプションが省略された場合はマッチしない行、 -v が指定された場合はマッチする行)。 しかし、rv 機能と -v コマンドラインオプションの両方が指定された場合、代わりに選択された非マッチ行に適用されます。
rv
ブール値は、-v コマンドライン・オプションが指定された場合、sl= と cx= 能力の意味を反転させます (入れ替えます)。
mt=01;31
任意の行 (-v コマンドライン オプションが省略された場合は選択行、-v が指定された場合はコンテキスト ライン) の空でないテキストにマッチする SGR 部分文字列。 この設定は、ms= と mc= の両方を一度に同じ値に設定することと同じです。
ms=01;31
SGR 選択された行の空でないテキストにマッチする部分文字列を指定します。 (これは、-v コマンドラインオプションが省略されたときのみ使用されます。) これが起動されたとき、sl= (rv の場合は cx=) 機能の効果は有効のままです。
mc=01;31
SGR コンテキスト行の空でないテキストにマッチする部分文字列を表示します。 (これは、-v コマンドラインオプションが指定されたときのみ使用されます。) これが起動されたとき、cx= (rv の場合は sl=) 機能の効果は、有効なままです。
fn=35
SGR ファイル名の部分文字列が、任意の内容行の前に来るようにする。
ln=32
SGR Substring for line numbers prefixing any content line.デフォルトは、ターミナルのデフォルト背景の上にマゼンタのテキスト前景を表示する。
bn=32
SGR substring for byte offsets prefixing any content line.デフォルトは、端末のデフォルト背景の上に緑色のテキスト前景が表示されます。
se=36
SGR selected line fields (:), context line fields, (-), および非ゼロのコンテキストが指定されたときに隣接する行のグループ間 (–) に挿入されるセパレータ用部分文字列。
ne
Boolean value that prevents clearing to the end of line using Erase in Line (EL) to Right (\33.). LC_ALL, LC_CTYPE, LANG これらの変数は、どの文字が空白文字になるかなどの文字の種類を決定する LC_CTYPE カテゴリに対してロケールを指定します。 LC_ALL, LC_MESSAGES, LANG これらの変数は、LC_MESSAGESカテゴリのロケールを指定し、 grepがメッセージに使用する言語を決定する。 デフォルトの Clocale はアメリカ英語のメッセージを使用します。 POSIXLY_CORRECT 設定されていると、grep は POSIX.2 が要求するように動作します。POSIX.2 は、ファイル名に続くオプションはファイル名として扱われなければならないと要求しています;デフォルトでは、そのようなオプションはオペランドリストの先頭に順列されオプションとして扱われます。 また、POSIX.2では、認識できないオプションは “不正 “と診断されることになっていますが、実際には法律に違反するわけではないので、デフォルトでは “無効 “と診断されます。 POSIXLY_CORRECTは、以下で説明する_N_GNU_nonoption_argv_flags_も無効化します。 N_GNU_nonoption_argv_flags_ (ここでNはgrepの数字プロセスIDです。) この環境変数の値の最初の文字が1であれば、grepの最初のオペランドがオプションであるかのように見えても、オプションとはみなしません。 シェルは、実行するコマンドごとにこの変数を環境に置き、どのオペランドがファイル名のワイルドカード展開の結果であり、したがってオプションとして扱われないかを指定することができます。 この動作は、GNU C ライブラリでのみ有効であり、POSIXLY_CORRECT が設定されていない場合のみ有効です。
終了ステータス
通常、終了ステータスは選択された行が見つかった場合は0、それ以外は1である。 しかし、-qまたは–quietまたは–silentオプションが使用され、選択行が見つかった場合を除き、エラーが発生した場合の終了ステータスは2である。 ただし、POSIX では、grep, cmp, diff のようなプログラムでは、エラー時の終了ステータスが 1 よりも大きくなることを義務付けているだけなので、移植性の観点から、2 と厳密に等しいかどうかではなく、この一般条件をテストするロジックを使用することが推奨される。 商取引や特定目的への適合性に関しても保証はありません。
Bugs
Reporting Bugs
Email Bug reports to <[email protected]>, that web page is <http://lists.gnu.org/mailman/listinfo/bug-grep>.grep’s Savannah bug tracker is located at <http://savannah.gnu.org/bugs/?group=grep>.
Known Bugs
{n,m} 構造体における大きな繰り返しカウントは、 grep が多くのメモリを使用する原因となる場合があります。 さらに、ある種の otherobscure 正規表現は指数関数的な時間と空間を必要とし、 grep がメモリ不足になることがあります。
Back-reference は非常に遅く、指数関数的な時間を必要とすることがあります。
See Also
Regular Manual Pages
awk(1), cmp(1), diff(1), find(1), gzip(1), perl(1), sed(1), sort(1), xargs(1), zgrep(1), mmap(2), read(2), pcre(3), pcresyntax(3), pcrepattern(3), terminfo(5), glob(7), regex(7).
POSIX プログラマーズマニュアル Page
grep(1p).
TeXinfo Documentation
grep の完全なドキュメントは TeXinfo マニュアルとして維持されています。 info と grep プログラムが正しくインストールされていれば、info grep コマンドで完全なマニュアルにアクセスできるはずです。
Notes
GNU は Unix ではないが、Unix は獣であり、その複数形は Unixen。