スポンサーリンク

GREP

名称
書式
解説
オプション
正規表現
環境変数
診断
バグ

名称

grep, egrep, fgrep, zgrep, zegrep, zfgrep, bzgrep, bzegrep, bzfgrep − パターンにマッチする行を表示する

書式

grep [options] PATTERN [FILE...]
grep
[options] [−e PATTERN | −f FILE] [FILE...]

解説

grep は、 FILE で名前を指定された入力ファイル (ファイルが指定されてない か、 FILE の部分に が指定された場合は標準入力) を読み込み、与えられた PATTERN にマッチする部分を含む行を探します。デフォルト動作で は、 grep はマッチした行を表示します。

さ ら に、2 つ の プログラム egrepfgrep を利用可能です。 egrepgrep −E と同じです。 fgrepgrep −F と同じです。 zgrepgrep −Z と 同 じです。 zegrepgrep −EZ と同じです。 zfgrepgrep −FZ と同じで す。

オプション

−A NUM, −−after-context=NUM

NUM で指定した行数だけ、パターンにマッチした行の後の行も表示 し ます。マッチしたグループの間には、 −− を含む行を挿入します。

−a, −−text

バ イナリファイルをテキストファイルであるかのように処理します。 これは −−binary-files=text オプションと等価です。

−B NUM, −−before-context=NUM

NUM で指定した行数だけ、パターンにマッチした行の前の行も表示 し ます。マッチしたグループの間には、 −− を含む行を挿入します。

−C NUM, −−context=NUM

NUM で指定した行数だけ、パターンにマッチした行の前後の行も表示 します。マッチしたグループの間には、 −− を含む行を挿入します。

−b, −−byte-offset

各出力行の前に、入力ファイルの先頭からのバイト単位のオフセッ ト を表示します。

−−binary-files=TYPE

ファ イルの最初の数バイトが、ファイルの内容がバイナリファイルで あることを示す場合、ファイルのタイプを TYPE であると仮 定 し ま す。 デフォルトでは TYPEbinary であり、 grep は通常、バイナ リファイルの一致を示す一行メッセージを表示するか、マッチしな い 場 合 に は なにも表示しません。 TYPEwithout-match の場合、 grep はバイナリファイルはマッチしないものと仮定します。こ れ は −I オプションと等価です。 TYPEtext の場合、 grep はバイナリ ファイルをテキストであるかのように扱います。これは −a オプ ショ ン と等価です。 警告: grep −−binary-files=text はバイナリのゴミ を表示する可能性があります。出力先が端末である場合で、端末ド ラ イ バがこのゴミの一部をコマンドであると解釈する場合、このゴミが 悪い副作用をおよぼす可能性があります。

−−colour[=WHEN], −−color[=WHEN]

マッチした文字列を GREP_COLOR 環境変数でで指定されたマーカで 囲 み ま す。 WHEN は、‘never’ または ‘always’、‘auto’ のどれかで す。

−c, −−count

通常の出力はせず、各入力ファイルについてマッチした行数を表示 し ま す。 −v, −−invert-match オプションと共に指定した場合は、マッ チしなかった行数を表示します (下記参照)。

−D ACTION, −−devices=ACTION

入力ファイルがデバイス、FIFO もしくはソケットの場合、 ACTION を 使っ てその処理を行いますデフォルトでは ACTIONread であり、 デバイスが通常ファイルであるかのように読み取る事を意味しま す。 ACTIONskip なら、デバイスを黙って読み飛ばします。

−d ACTION, −−directories=ACTION

入 力ファイルがディレクトリの場合に、 ACTION を使ってその処理を 行います。デフォルトでは ACTIONread であり、ディレクトリ を 普 通のファイルであるかの様に読み取る事を意味します。 ACTIONskip なら、ディレクトリを黙って読み飛ば し ま す。 ACTIONrecurse なら、 grep は各ディレクトリ下のすべてのファイルを再帰 的に読み取ります。これは −r オプションと等価です。

−E, −−extended-regexp

PATTERN を拡張された正規表現として扱います (下記参照)。

−e PATTERN, −−regexp=PATTERN

PATTERN をパターンとして指定します。 で始まるパターンを保護す るために有効です。

−F, −−fixed-strings

PATTERN を改行で区切られた固定文字列のリストとして扱います。そ の文字列のどれかとマッチするかを調べます。

−P, −−perl-regexp

PATTERN を Perl の正規表現として解釈します。

−f FILE, −−file=FILE

パターンを FILE から 1 行ごとに読み込みます。空のファイル は パ ターンを含まないので、何にもマッチしません。

−G, −−basic-regexp

PATTERN を基本的な正規表現として扱います (下記参照)。デフォルト です。

−H, −−with-filename

各々のマッチに対してファイル名を表示します。

−h, −−no-filename

複数ファイルを検索した時に、出力の前にファイル名を付けること を 抑制します。

−−help

簡単なヘルプメッセージを出力します。

−I

バイナリファイルをマッチするデータを含まないかのように処理 します。これは −−binary-files=without-match オプションと等価 で す。

−i, −−ignore-case

PATTERN と入力ファイルの双方で、英大文字と小文字の区別をしない ようにします。

−L, −−files-without-match

通常の出力はせず、このオプションを指定しなかったときに全く出 力 さ れ な い入力ファイルの名前を表示します。スキャン動作は最初の マッチで終了します。

−l, −−files-with-matches

通常の出力はせず、このオプションを指定しなかったときに出力さ れ る 入力ファイルの名前を表示します。スキャン動作は最初のマッチで 終了します。

−m NUM, −−max-count=NUM

NUM 個のマッチした行のあと、ファイルの読み取りを停止します。 も し、通常ファイルから標準入力を介して入力が行われており、 NUM 個 のマッチした行が出力だった場合、その後に続くコンテキスト行が あ る か ど うかに関わらず、 grep は、終了する前に標準入力が最後に マッチした行の直後に位置される事を保証します。これによって、 呼 び 出 したプロセスが検索を再開する事が可能となります。 NUM 個の マッチした行の後に停止した場合、 grep は、その後に続くコンテ キ スト行を出力します。 −c−−count オプションも指定された場合、 grepNUM より大きな行数を出力しません。 −v−−invert-match オプションも指定された場合、 grepNUM 個のマッチしない行の出 力後に停止します。

−−mmap

可能ならば、デフォルトの read(2) システムコールの代わり に mmap(2) システムコールを使って入力を読み取ります。ある状況に おいて、 −−mmap はよりよい性能をもたらします。しかし、 grep の 動作中に入力ファイルが小さくなるか、または I/O エラーが生じた場 合に、 −−mmap は (コアダンプを含む) 未定義の動作を引き起こす 可 能性があります。

−n, −−line-number

各出力行の前に、入力ファイルにおける行番号を表示します。

−o, −−only-matching

マッチした行の PATTERN にマッチした部分のみを表示します。

−−label=LABEL

実際には標準入力からの入力を、ファイル LABEL からの入力として表 示します。これは zgrep などのツールに対して、特に便利です。 例: gzip -cd foo.gz |grep --label=foo something

−−line-buffered

行 ごとに出力をおこないます。これはパフォーマンスが悪くなる事が あります。

−q, −−quiet, −−silent

沈黙: 標準出力には何も出力しません。何かマッチした場合、エ ラー が起きた時でも直ちに返り値 0 で終了します。 −s−−no-messages オプションも参照。

−R, −r, −−recursive

各ディレクトリ下のすべてのファイルを再帰的に読み取ります。こ れ は −d recurse オプションと等価です。

−−include=PATTERN

PATTERN にマッチするファイルのみを検索しながら、ディレクトリを 再帰します。

−−exclude=PATTERN

PATTERN にマッチするファイルを読み飛ばしながら、ディレクトリ を 再帰します。

−s, −−no-messages

指 定されたファイルが存在しないことや読み込みできないことを示す エラーメッセージを抑止します。移植性に関する注: GNU grep とは異 なり、伝統的な grepPOSIX.2 に適合していませんでした。なぜな ら、伝統的な grep には −q オプションが無く、 −s オプ ショ ン は GNU grep−q オプションの様に動作したからです。伝統的な grep へ移植可能であることを意図したシェルスクリプトは、 −q−s を 両方とも使わずに、出力を /dev/null へリダイレクトすべきです。

−U, −−binary

ファ イ ル を バイナリとして扱います。デフォルトでは、MS-DOS と MS-Windows 環境下で grep は、ファイルから読み取った最初の 32KB の 内容を見て、ファイルタイプを推測します。 grep はファイルをテ キストファイルと判断した場合、オリジナルのファイル内容から ( ^$ が使われている正規表現を正しく動作させるために ) CR 文字を 取り除きます。 −U を指定すると、この当て推量を抑制し、すべて の ファ イルを読み取ってマッチ機構へそのまま渡します。もしファイル が各行の末尾に CR/LF の組みを持つテキストファイルなら、このオプ ショ ンは正規表現を役に立たなくさせることがあるでしょう。このオ プションは MS-DOS と MS-Windows 以外のプラットフォームでは効 果 がありません。

−u, −−unix-byte-offsets

unix 形式のバイト単位オフセットを報告します。このスイッチを指定 すると grep は、ファイルが unix 形式のテキストファイル、すな わ ち、 CR 文字が取り除かれたファイルであるかのごとくにバイト単位 オフセットを報告します。このことは grep を Unix マシンで動作 さ せ たのと同じ結果を生成します。このオプションは −b オプションも 使用しない限り効果がありません。 MS-DOS と MS-Windows 以外の プ ラットフォームでは効果がありません。

−V, −−version

grep のバージョン番号を標準エラー出力に表示します。バグレポート には、この番号を付記してください (下記参照)。

−v, −−invert-match

結果を反転し、マッチしなかった行を選択します。

−w, −−word-regexp

完全な語にマッチする行のみを選択します。マッチする部分文字列 が 行 頭から始まっているか、単語構成文字以外の文字が前にあることが テストされます。同様に、マッチする部分文字列が行末まである か、 単 語構成文字以外の文字が後にある必要があります。単語構成文字と は、レター・数字・アンダスコアです。

−x, −−line-regexp

行全体と正確にマッチする行のみを選択します。

−y

−i と同じ意味を持つ旧式のオプションです。

−−null

通常ファイル名の後に続く文字の代わりにバイト 0 ( ASCII NUL 文字) を出力します。例えば、 grep −l −−null は各ファイル名 の後に、通常の newline ではなくバイト 0 を出力します。このオ プ ションを指定すると、 newline 等の例外的な文字を含むファイル名に 直面した場合でも出力が明白になります。このオプ ショ ン を find −print0, perl −0, sort −z, xargs −0 等のコマンドと共に使用すれ ば、任意のファイル名を処理できます。ファイル名が newline 文字を 含んでいても処理可能です。

−Z, −−decompress

検 索 を 開 始 する前に入力データを伸長します。このオプションは zlib(3) ライブラリと共にコンパイルした場合のみ使用可 能 で す。 −J, −−bz2decompress 検索を開始する前に入力データを bzip2(1) を 使用して伸長します。

正規表現

正規表現は、文字列の集合を表現するパターンの事です。数式表現と同様 に、 よ り小さな表現を組み合わせるさまざまな演算子を用いる事で、正規表現を組 み立てます。

grep は、「基本」正規表現と「拡張」正規表現の 2 種類の正規表現文法を 扱 う 事ができます。 GNU grep では、どちらの正規表現文法も機能的な違いはあ りません。他の実装では、基本正規表現は拡張正規表現より能力が低くなっ て い ます。ここでは、拡張正規表現について説明します。基本正規表現との違い は、その後に説明します。

正規表現の基本単位は、1 文字にマッチする正規表現です。レターと数字を 含 む 多くの文字は、それ自身にマッチする正規表現です。また、特殊な意味を持 つメタ文字も、その文字の前にバックスラッシュを付けると、その本来の文 字 にマッチするようになります。

角 括弧式は、 [] で囲まれた文字のリストです。これは、そのリスト中に 含まれるどれか 1 文字にマッチします。ただし、リストの先頭がキャレット ^ の 場 合は、そのリストに含まれ ない文字にマッチします。例えば、正規表現 [0123456789] は数字 1 文字にマッチします。

角括弧式内で、 範囲式はハイフンで分けられた 2 文字で構成されます。こ れ は、ロケールの照合順序や文字集合を用いて、この 2 文字を含み、この間に並 ぶ 1 文字にマッチするものです。例えば、デフォルトの C ロケー ル で は、 [a−d][abcd] と等価です。多くのロケールでは文字を辞書順に並べてお り、そのようなロケールでは、 [a−d] は一般的に [abcd] と等価ではなく、例 えば [aBbCcDd] と等価かもしれません。角括弧式の古典的な解釈を使用するに は、 LC_ALL 環境変数に値 C を設定し、C ロケールを使用してください。

最後に、特定の名前を持つ文字クラスが、角括弧式にて以下のようにあらか じ め 定 義 さ れ て い ます。 [:alnum:], [:alpha:], [:cntrl:], [:digit:], [:graph:], [:lower:], [:print:], [:punct:], [:space:], [:upper:], [:xdigit:] 例えば、 [[:alnum:]][0−9A−Za−z], と同じですが、後者が C ロケールや ASCII 文字符号化に依存するのに対して、前者はロケールや文字集 合 に依存しません。 (クラス名の中の角括弧はシンボル名の一部であり、リス トを区切る角括弧とは別に指定する必要があることに注意) リストの中で は、 ほ と んどのメタ文字は通常の文字として扱われます。リテラル ] を含めるに は、この文字をリストの先頭に置いてください。同様に、リテラル ^ を含める には、この文字をリストの先頭以外に置いてください。リテラル を含めるに は、この文字をリストの最後に置いてください。

ピリオド . は、任意の 1 文字にマッチします。シンボル \w[[:alnum:]] と同じ意味で、シンボル \W[^[:alnum:]] と同じ意味です。

キャ レット ^ と、ドル記号 $ は、それぞれ行頭と行末の空文字列にマッチす るメタ文字です。シンボル \< とシンボル \> は、それぞれ単語の先頭と末 尾 の 空文字列にマッチするメタ文字です。シンボル \b は単語の端の空文字列に マッチします。シンボル \B は単語の端 以外の空文字列にマッチします。

正規表現の後には、繰り返し演算子のどれかが続くことがあります。

?

直前の項目はオプションであり、最大 1 回マッチします。

*

直前の項目は 0 回以上マッチします。

+

直前の項目は 1 回以上マッチします。

{n}

直前の項目は厳密に n 回マッチします。

{n,}

直前の項目は n 回以上マッチします。

{n,m}

直前の項目は、最低 n 回、最大 m 回マッチします。

2 つの正規表現は結合可能です。結果としてできあがる正規表現は、結合さ れ た 2 つの部分表現にそれぞれマッチする 2 つの部分文字列を結合した任意の 文字列にマッチします。

2 つの正規表現は中置き型演算子 | で繋ぐことが可能です。結果としてできあ が る正規表現は、どちらかの部分表現にマッチする任意の文字列にマッチしま す。

繰り返しは結合に優先します。また結合は選択に優先します。これらの優先 規 則を無効とするために、部分表現全体を括弧で囲むことが可能です。

n が 1 つの数字であるような後方参照 \n は、正規表現中の括弧で囲まれた n 番目の部分表現がマッチした文字列とマッチします。

基本正規表現では、メタ文字 ?, +, {, |, (, ) は、その特殊な意味を失い ま す。 代わりに、バックスラッシュを付けた \?, \+, \{, \|, \(, \) を使用し てください。

伝統的な egrep は、メタ文字 { をサポートしませんでした。また、このメ タ 文字の代わりに \{ をサポートする egrep 実装もいくつか存在するので、移植 可能なスクリプトでは、リテラル { にマッチさせるために egrep パターン で { を使うことは避けて [{] を使うべきです。

GNU egrep は、 { が不正な範囲指定の始まりであるなら特殊文字ではない、と 想定して、伝統的な使用法のサポートを試みます。例えば、シェルコ マ ン ド egrep ’{1’ は正規表現の文法エラーを報告せずに、2 文字の文字列 {1 を検索 します。 POSIX.2 は、この動作を一つの拡張として許可していますが、移植可 能なスクリプトではこの使用法を避けるべきです。

環境変数

grep の動作は、以下の環境変数によって影響を受けます。

ロケール LC_foo は、以下の 3 つの環境変数 LC_ALL, LC_foo, LANG がこの順 番で検査される事によって、指定されます。これらの変数の中で最初に設定 さ れ ていたものによって、ロケールが指定されます。例えば、 LC_ALL が設定さ れておらず、 LC_MESSAGESpt_BR に設定されていた場合、ブラジルのポ ル トガル語が LC_MESSAGES ロケールに対して使用されます。これらの環境変数が どれも設定されていなかったり、もしくはロケールのカタログがインストー ル されていなかったり、また grep が各国語サポート ( NLS ) なしでコンパイルさ れていた場合、 C ロケールが使用されます。

GREP_OPTIONS

この変数は明示的なオプションの前に指定されるデフォルトオプ ショ ン を 指 定 し ま す。 例 え ば、 も し GREP_OPTIONS’−−binary-files=without-match −−directories=skip’ である場 合、 grep は 2 つ の オプション −−binary-files=without-match−−directories=skip が明示的なオプションの前に指定されている様に 動 作します。オプションの指定は空白によって区切られます。バック スラッシュは次の文字をエスケープします。これは空白や バッ ク ス ラッシュを含むオプションを指定するために用いられます。

GREP_COLOR

ハイライトするマーカを指定します。

LC_ALL, LC_COLLATE, LANG

これらの変数は、 [a−z] のような範囲式を解釈する際の参照順序を決 定する LC_COLLATE を指定します。

LC_ALL, LC_CTYPE, LANG

これらの変数は、例えばどの文字が空白であるかなど、文字の種類 を 決定する LC_CTYPE を指定します。

LC_ALL, LC_MESSAGES, LANG

こ れ ら の 変 数 は、 grep の出すメッセージの言語を決定する LC_MESSAGES を指定します。デフォルトの C ロケールは、アメリカ英 語のメッセージを使用します。

POSIXLY_CORRECT

設定されている場合、 grepPOSIX.2 として動作し、それ以外の場 合は grep は他の GNU プログラムのように動作します。 POSIX.2 で は ファイル名の後に続くオプションはファイル名として扱われます。 デフォルトでは、このようなオプションはオペランドリストの先頭 に 並 び変えられて、オプションとして扱われます。また、 POSIX.2 では 認識できないオプションは “ 不法 (illegal)” であると診断されます が、法律に違反しているわけではないので、デフォルトではこれらは“ 不正 (invalid)” であると診断されます。

診断

通常、選択された行が見つかった場合は 0 を、見つからなかった場合は 1 を 返します。エラーが生じた場合 2 を返しますが、 −q−−quiet−−silent オプションが指定されており、選択された行が見つかった場合は、その限り で はありません。

バグ

バ グ レ ポートは、 bug-gnu-utils@gnu.org まで Email してください。この 時、“Subject:” のどこかに “grep” という単語を忘れずに入れてください。

{n,m} の表現で非常に大きな繰り返しを指定すると、非常に多くのメモリを 消 費 します。さらに、ある種のあいまいな正規表現を指定すると、必要となる時 間とメモリ領域は指数的に増大し、 grep がメモリ不足を起こす可能性があ り ます。

後方参照は非常に動作が遅く、必要となる時間は指数的に増大します。

スポンサーリンク