Grep

「プログラミング」及び「開発」関連用語集

カテゴリー: 正規表現  閲覧数:311 配信日:2018-05-11 09:59


Grep


Global search for Regular Expression and Print
・grep, egrep, fgrep - パターンにマッチする行を表示する

1973年
・Ken Thompson(ケン・トンプソン)が、edの正規表現検索機能を単独のプログラムに切り出してUnixに搭載

※現在では、複数の実装が存在する

Grep - GNU Project


GNU Grep 3.0

1988年
・最初のバージョンをリリース



grepを訪ねて

GNU grep 2.20


2014年6月3日リリース

CentOS7
$ grep --version
grep (GNU grep) 2.20
Copyright (C) 2014 Free Software Foundation, Inc.
ライセンス GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

作者 Mike Haertel および その他の方々は <http://git.sv.gnu.org/cgit/grep.git/tree/AUTHORS> を参照してください。


$ info grep
File: grep.info-t,  Node: Top,  Next: Introduction,  Up: (dir)

grep
****

`grep' prints lines that contain a match for a pattern.

This manual is for version 2.20 of GNU Grep.

This manual is for `grep', a pattern matching engine.

Copyright (C) 1999-2002, 2005, 2008-2014 Free Software Foundation,
Inc.


GNU grep 2.6.3


2010年リリース

CentOS7における man grep 日本語
$ man grep
GREP(1)                                      General Commands Manual                                     GREP(1)

名前
      grep, egrep, fgrep - パターンにマッチする行を表示する

書式
      grep [OPTIONS] PATTERN [FILE...]
      grep [OPTIONS] [-e PATTERN | -f FILE] [FILE...]

説明
      grep   は  FILE  で名前を指定されたファイル  (ファイルが指定されていない場合や、  ファイル名の代わりに  1
      個のマイナス記号      (-)      が指定されている場合は標準入力)       を検索して、与えられた       PATTERN
      にマッチする部分を含む行を探します。 デフォルトでは、 grep はマッチした行を表示します。

      さらに、2  つの兄弟プログラム  egrep  と  fgrep  が利用可能です。  egrep は grep -E と同じです。 fgrep は
      grep -F     と同じです。     egrep     や     fgrep      を直接その名前で呼び出すのは、お勧めできません。
      それが可能になっているのは、こうしたコマンドの存在を前提とする
      昔のアプリケーションが、プログラムを修正しないでも 動くようにするためなのです。

オプション
  プログラムについての一般情報
      --help 以下に述べるコマンドラインオプションについて簡潔にまとめた使用法と、
             バグレポートのためのアドレスを表示して、終了します。

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

  正規表現の選択
      -E, --extended-regexp
             PATTERN   を拡張正規表現   (ERE)    として扱います    (下記参照)。    (-E    オプションは    POSIX
             で規定されています)

      -F, --fixed-strings
             PATTERN     を改行で区切られた固定文字列     (訳注:    すなわち、正規表現ではない    ただの文字列)
             のリストとして扱い、   その文字列のどれかとマッチするかを調べます。   (-F    オプションは    POSIX
             で規定されています)

Manual page grep(1) line 1 (press h for help or q to quit)...skipping...
GREP(1)                                      General Commands Manual                                     GREP(1)

名前
      grep, egrep, fgrep - パターンにマッチする行を表示する

書式
      grep [OPTIONS] PATTERN [FILE...]
      grep [OPTIONS] [-e PATTERN | -f FILE] [FILE...]

説明
      grep   は  FILE  で名前を指定されたファイル  (ファイルが指定されていない場合や、  ファイル名の代わりに  1
      個のマイナス記号      (-)      が指定されている場合は標準入力)       を検索して、与えられた       PATTERN
      にマッチする部分を含む行を探します。 デフォルトでは、 grep はマッチした行を表示します。

      さらに、2  つの兄弟プログラム  egrep  と  fgrep  が利用可能です。  egrep は grep -E と同じです。 fgrep は
      grep -F     と同じです。     egrep     や     fgrep      を直接その名前で呼び出すのは、お勧めできません。
      それが可能になっているのは、こうしたコマンドの存在を前提とする
      昔のアプリケーションが、プログラムを修正しないでも 動くようにするためなのです。

オプション
  プログラムについての一般情報
      --help 以下に述べるコマンドラインオプションについて簡潔にまとめた使用法と、
             バグレポートのためのアドレスを表示して、終了します。

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

  正規表現の選択
      -E, --extended-regexp
             PATTERN   を拡張正規表現   (ERE)    として扱います    (下記参照)。    (-E    オプションは    POSIX
             で規定されています)

      -F, --fixed-strings
             PATTERN     を改行で区切られた固定文字列     (訳注:    すなわち、正規表現ではない    ただの文字列)
             のリストとして扱い、   その文字列のどれかとマッチするかを調べます。   (-F    オプションは    POSIX
             で規定されています)

      -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
             マッチする部分が完全な単語を形成するときにのみ、その行を選択します。
             次の条件を検査します。パターンにマッチする部分文字列は、行頭にあるか、
             さもなければ、単語構成文字以外の文字の直後になければならない。
             また、その部分文字列は、行末にあるか、さもなければ、単語構成文字以外の文字の
             直前になければならない              (訳注:              ここで「完全な単語を形成する」というのは、
             それが空白、改行、引用符、句読点などで前後を区切られた文字列だ ということです。たとえば、文字列「A
             word with you」中の word  という  部分文字列は完全な単語ですが、文字列「two  words」中の部分文字列
             word   は   完全な単語を形成しません)。   単語構成文字とは、アルファベット、数字、アンダスコアです
             (訳注: 実は漢字や仮名も単語構成文字として扱われます)。

      -x, --line-regexp
             パターンが行全体とぴったりマッチしたときにのみ、その行を選択します。   (-x   オプションは    POSIX
             で規定されています)

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

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

      --color[=WHEN], --colour[=WHEN]
             マッチした                 (空文字列ではない)                 文字列、マッチする行、前後の文脈行、
             ファイル名、行番号、バイトオフセット、(フィールドや、前後の文脈行を含む            グループ同士の)
             区切り記号をエスケープ・シーケンスで囲み、ターミナル上に                      色付きで表示します。
             どの色を使うかは、環境変数       GREP_COLORS       で定義します。非推奨の環境変数       GREP_COLOR
             も、これまでどおり使用できますが、その設定は優先されません。   WHEN   は   never,   always,   auto
             のいづれかです。

      -L, --files-without-match
             通常の出力はしません。その代わりに、                                                          grep
             を普通に実行した際に、何の検索結果も表示しないような入力ファイルの名前を     列挙します     (訳注:
             すなわち、-L オプションを指定すると、 -v  オプションを同時に指定しない場合は、パターンにマッチする
             文字列を含む行がまったく存在しないファイルの名前を列挙するということです)。
             個々のファイルに対する走査は、最初のマッチで終了します。

      -l, --files-with-matches
             通常の出力はしません。その代わりに、                                                          grep
             を普通に実行した際に、何らかの検索結果を表示するような入力ファイルの名前を    列挙します    (訳注:
             すなわち、-l オプションを指定すると、 -v  オプションを同時に指定しない場合は、パターンにマッチする
             文字列を含む行が存在するファイルの名前を列挙するということです)。
             個々のファイルに対する走査は、最初のマッチで終了します。       (-l       オプションは        POSIX
             で規定されています)

      -m NUM, --max-count=NUM
             マッチした行数が                  NUM                 に達したら、ファイルの読み込みを中止します。
             入力が通常ファイルから標準入力を介して行われている場合は、マッチした行を  NUM   行出力した時点で、
             grep                      は標準入力の読み出し位置を最後にマッチした行の直後に来るようにしてから、
             終了します。続いて表示する文脈行がある場合でも、この動作は変わりません。     このことは、     grep
             を呼び出すプロセスが、中止したところから検索を          再開することを可能にします。          grep
             はマッチした行数が NUM  に達してストップしたとき、それに続く文脈行があれば、それを出力します。  -c
             や  --count  オプションを同時に使用した場合、  grep  は  NUM  よりも大きい数を出力しません。 -v や
             --invert-match    を同時に使用した場合は、マッチしない行を    NUM    行出力したところで、     grep
             はストップします。

      -o, --only-matching
             マッチする行のマッチした部分だけを             (それが空文字列でなければ)             表示します。
             マッチした各文字列は、それぞれ別の行に書き出します。

      -q, --quiet, --silent
             沈黙モードです。標準出力に何も書き出しません。                 マッチするものが                  1
             つでも見つかると、エラーを検出していた場合でも、   終了ステータス  0  で即座に終了します。  -s  や
             --no-messages オプションも参照してください。 (-q オプションは POSIX. で規定されています)

      -s, --no-messages
             ファイルが存在しないことや読み込みめないことを示す                  エラーメッセージを抑止します。
             移植に関する注意:    GNU    grep    とは異なり、    Unix    第    7    版の    grep    は    POSIX
             の規格に沿っていませんでした。なぜなら、それには -q オプションがなく、 -s オプションも GNU grep の
             -q  オプションのように動作したからです。 USG 系の grep にも -q オプションがありませんでしたが、 -s
             オプションの方は GNU の grep と同じように動作しました (訳注: USG は Unix  Support  Group の略。USG
             Unix     と言うと、     Unix     第     7    版以後の    AT&T    系の商用    Unix    を指します)。
             移植性を考慮したシェルスクリプトでは、                  -q                  と                  -s
             のどちらも使用することは避けて、標準出力や標準エラーを /dev/null に リダイレクトするべきです。 (-s
             オプションは POSIX で規定されています)

  出力する行の前に付ける情報の制御
      -b, --byte-offset
             出力する各行の前に、その入力ファイル内での 0  から始まる  バイト単位のオフセットを表示します。  -o
             (--only-matching) も指定されているときは、マッチする部分そのもののオフセットを示します。

      -H, --with-filename
             各々のマッチに対してそのファイル名を表示します。                検索するファイルが               2
             個以上の場合は、これがデフォルトの動作です。

      -h, --no-filename
             出力する行の前にファイル名を付けないようにします。      検索するファイルが      1       つしかない
             (あるいは、標準入力だけだった) 場合は、 これがデフォルトの動作です。

      --label=LABEL
             実際には標準入力から来た入力を LABEL というファイルから来たもののように見せかけます。 これは zgrep
             のようなツールを自分で作成する際にとりわけ便利です。たとえば、 gzip -cd foo.gz | grep  --label=foo
             -H something といった具合です。 -H オプションも参照してください。

      -n, --line-number
             各出力行の前に、その入力ファイル内での  1  から始まる行番号を表示します。  (-n オプションは POSIX.
             で規定されています)

      -T, --initial-tab
             行の実際の内容をなす最初の文字が、必ずタブ・ストップの位置に
             来るようにします。その結果、タブがきちんと揃って見えるようになります。  このオプションは  -H,-n,-b
             といった、実際の内容の前に情報を付加するオプションを使うときに                      役に立ちます。
             また、このオプションは、        1       つのファイルから抜き出した行の先頭ができるだけ揃うように、
             行番号やバイトオフセットがある場合は、そのフィールド幅を 必要最小のサイズにして表示します。

      -u, --unix-byte-offsets
             Unix  形式のバイトオフセットを報告します。  このスイッチを使うと、  grep  は、検索対象のファイルが
             Unix      形式のテキストファイルであるかのように、      バイトオフセットを報告します。すなわち、CR
             文字を切り捨てるのです。          そのため、表示される結果は、Unix          マシンで          grep
             を実行したときと同じものになります。                     このオプションは、                     -b
             オプションを同時に使用しないかぎり、効果がありません。   また、このオプションは、MS-DOS   と   MS-
             Windows 以外の プラットホームでは、何の効果もありません。

      -Z, --null
             ファイル名に続いて通常出力される文字の代わりに、   値が   0   の   1   バイト   (ASCII  NUL  文字)
             を出力します。  たとえば、  grep  -lZ   は、いつもの改行   (newline)   ではなく、値が   0   の   1
             バイトを各ファイル名の後ろに                                                      出力するのです。
             このオプションは、改行のような変わった文字を含むファイル名があるときでも、
             出力の曖昧さをなくしてくれます。  このオプションを  find  -print0,  perl  -0,  sort  -z,  xargs -0
             などのコマンドと組み合わせて使うと、行儀の悪いファイル名も                処理することができます。
             ファイル名が改行文字を含んでいても処理できるのです。

  前後の文脈行の制御
      -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 と同時に使うと、このオプションは効果がなく、警告メッセージを出します。

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

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

      -D ACTION, --devices=ACTION
             入力ファイルがデバイス、FIFO、ソケットのいづれかである場合に、 ACTION を使ってその処理を行います。
             デフォルトの ACTION は read です。すなわち、デバイスなどを、それが普通のファイルであるかのように、
             読み込みます。 ACTION が skip ならば、デバイスなどを黙ってスキップします。

      -d ACTION, --directories=ACTION
             入力ファイルがディレクトリの場合に、  ACTION  を使ってその処理を行います。デフォルトの  ACTION  は
             read  です。すなわち、ディレクトリを、それが普通のファイルであるかのように、 読み込みます。 ACTION
             が   skip   ならば、ディレクトリを黙ってスキップします。   ACTION   が   recurse    なら、    grep
             は各ディレクトリの下にあるすべてのファイルを再帰的に読み込みます。            これは            -r
             オプションと等価です。

      --exclude=GLOB
             ベースネーム   (訳注:   パスなしのファイル名)   が    GLOB    にマッチするファイルをスキップします
             (ワイルドカードのマッチングを   使用します)。   GLOB   で指定するファイル名には、   *,   ?,  [...]
             がワイルドカードとして使えます。                      \                       を文字の前に置けば、
             ワイルドカード文字やバックスラッシュ文字を本来の意味で使用できます。

      --exclude-from=FILE
             ファイル     FILE     を読み込み、そこに書かれているファイル名    (ワイルドカード可)    のどれかに
             ベースネームがマッチするファイルをスキップします                                        (--exclude
             の項で説明したワイルドカードのマッチングを使用します)。

      --exclude-dir=DIR
             DIR というパターンにマッチするディレクトリを再帰検索から除外します。

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

      --include=GLOB
             ベースネームが           GLOB           にマッチするファイルのみを検索します            (--exclude
             の項で説明したワイルドカードのマッチングを使用します)。

      -R, -r, --recursive
             各ディレクトリの下にあるすべてのファイルを再帰的に読み込みます。       これは      -d      recurse
             オプションと等価です。

  その他のオプション
      --line-buffered
             行ごとに出力を行います。 実行速度が落ちるかもしれません。

      --mmap 可能ならば、デフォルトの            read(2)            システムコールの代わりに            mmap(2)
             システムコールを使って入力を読み込みます。                  場合によっては                  --mmap
             を指定すると、性能が上がることがあります。                      しかし、                      grep
             の動作中に入力ファイルがほかのプロセスによって切り詰められたり、    I/O   エラーが生じたりすると、
             --mmap は (コアダンプを含む) 未定義の動作を引き起こす可能性があります。

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

      -z, --null-data
             各行が改行ではなく、値が       0       の       1       バイト       (ASCII       NUL        文字)
             で区切られる、そういう行の集まりとして入力を処理します。  -Z  や  --null  と同様、このオプションは
             sort -z などのコマンドと組み合わせて、 行儀の悪いファイル名の処理に使用することができます。

正規表現
      正規表現とは、一群の文字列を一まとめにして表現するパターンのことです。
      正規表現の構成方法は、数式によく似ています。すなわち、さまざまな演算子を
      使い、小さな表現を組み合わせて構成するのです。

      grep            は、「基本」正規表現、「拡張」正規表現、「Perl            の」正規表現という            3
      種類の正規表現文法を扱うことができます。                                                         GNU grep
      では、「基本」と「拡張」の文法の間で、利用できる機能に違いはありません。
      他の実装では、基本正規表現は拡張正規表現ほど強力ではないものです。 ここでは、拡張正規表現について説明し、
      基本正規表現との相違については、後で簡単にまとめることにします。                               なお、Perl
      の正規表現は機能がさらに増加しており、   pcresyntax(3)   や  pcrepattern(3)  で詳細に解説されていますが、
      どのシステムでも利用できるとはかぎりません。

      正規表現を構成する基本単位は、1                                            文字にマッチする正規表現です。
      アルファベットや数字を含むほとんどの文字が、自分自身にマッチする正規表現です。
      また、特殊な意味を持つメタ文字も、その文字の前にバックスラッシュ
      を付けると、その本来の文字にマッチするようになります。

      ピリオド . は、任意の 1 文字にマッチします。

  文字クラスと角括弧式 (ブラケット式)
      角括弧式   とは、   [   と   ]   で囲まれた文字のリストのことです。   角括弧式   は、リスト中の任意の   1
      文字にマッチします。  また、リストの最初の文字がキャレット   ^   の場合は、リスト中の文字以外の任意の   1
      文字にマッチします。 たとえば、正規表現 [0123456789] は任意の数字 1 個にマッチするわけです。

      角括弧式の内側に     範囲式     を置くことができますが、これはハイフンで区切られた     2     つの文字から
      なっています。範囲式は、現在使用中のロケールにおける照合順序と       文字集合を使ったときに、その       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       文字コードに依存しているのに対して、
      前者はロケールや文字集合に依存しません。
      (こうしたクラス名に使用されている角括弧は、シンボル名の一部なので、
      角括弧式の前後に付く角括弧とは別に指定する必要があることに                            注意してください。)
      角括弧式の内側では、ほとんどのメタ文字がその特別な意味を               持たなくなります。               ]
      という記号そのものを角括弧式に含めるには、      それをリストの先頭に置いてください。      同様に、      ^
      という記号そのものを含めるには、      それを先頭以外のどこかに置けばよいでしょう。       最後に、       -
      そのものを含めるには、 それをリストの最後に置きます。

  行頭と行末 (アンカリング)
      キャレット ^ と ドル記号 $ は、それぞれ行頭と行末の空文字列にマッチするメタ文字です。

  バックスラッシュ付きの特別な表現
      シンボル  \<  とシンボル  \> は、それぞれ単語の先頭と末尾の空文字列にマッチするメタ文字です。 シンボル \b
      は単語の端の空文字列にマッチします。 シンボル \B は単語の端 以外 の空文字列にマッチします。  シンボル  \w
      は [[:alnum:]] と同じ意味で、 シンボル \W は [^[:alnum:]] と同じ意味です。

  繰り返し
      正規表現の後には、繰り返し演算子のどれかが続くことがあります。
      ?      直前の項目があってもなくてもよく、マッチするとしても 1 回だけということ。
      *      直前の項目が 0 回以上マッチするということ。
      +      直前の項目が 1 回以上マッチするということ。
      {n}    直前の項目がちょうど n 回マッチするということ。
      {n,}   直前の項目が n 回以上マッチするということ。
      {,m}   直前の項目が m 回以下マッチするということ。
      {n,m}  直前の項目が n 回以上 m 回以下マッチするということ。

  結合
      2                 つの正規表現は結合することができます。                 結果としてできあがる正規表現は、
      結合対象となる部分表現にそれぞれマッチする                                                              2
      つの部分文字列を結合して作られる、どんな文字列にもマッチします。

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

  優先順位
      繰り返しは結合に優先します。また結合は選択に優先します。                     表現の                     1
      つのまとまりを括弧でくくると、その内側の式をこうした優先規則より         さらに優先させることができます。
      括弧でくくった部分は、1 つの部分表現になるのです。

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

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

      元々の    egrep    は、    {    をメタ文字としてサポートしていませんでしたし、    {     の代わりに     \{
      をメタ文字としてサポートする  egrep の実装も存在します。 ですから、移植を考慮したスクリプトでは、 grep -E
      のパターンで   {   を使用することは避けるべきです。   {   という記号そのものにマッチさせたいときは    [{]
      を使うとよいでしょう。

      GNU        の       grep -E       は、       {       が繰り返し回数指定の始まりとして意味をなさない場合、
      それを特殊文字ではないと見なし、従来の用法のサポートを試みます。     たとえば、コマンド      grep -E '{1'
      は、正規表現に文法エラーがあると報告するかわりに、2      文字からなる文字列     {1     を検索するのです。
      この動作は、POSIX.2                                                によって拡張として認められていますが、
      移植を考慮したスクリプトでは使用しない方がよいでしょう。

環境変数
      grep の動作は、 以下に挙げる環境変数の影響を受けます。

      LC_foo         カテゴリのロケールは、         LC_ALL,         LC_foo,         LANG        という        3
      つの環境変数をこの順番で調べることで決まります。 この 3  つの環境変数のうち、設定されている最初のものが、
      LC_foo   のロケールを決めるのです。   たとえば、   LC_ALL   が設定されていず、   LC_MESSAGES   が   pt_BR
      に設定されているとしましょう。       そのときは、ブラジルのポルトガル語というロケールが       LC_MESSAGES
      カテゴリに使用されるわけです。               こうした環境変数がまったく設定されていなかったり、ロケールの
      カタログがインストールされていなかったり、            grep             が各国語サポート             (NLS)
      を有効にしてコンパイルされていなかったり した場合は、C ロケールが使用されます。

      GREP_OPTIONS
             この変数ではデフォルトのオプションを指定しますが、そうしたオプションは
             コマンドラインで明示的に指定するオプションの前に置かれることになります。  たとえば、  GREP_OPTIONS
             が       '--binary-files=without-match       --directories=skip'      ならば、      grep      は、
             コマンドラインで明示的に指定するオプションの前に          --binary-files=without-match          と
             --directories=skip     の     2     つのオプションがすでに指定されているかのように振舞うわけです。
             オプションを複数指定するときは、空白                  (whitespace)                  で区切ります。
             バックスラッシュは次に来る文字をエスケープするので、               空白               (whitespace)
             やバックスラッシュを含むオプションを指定するのに 使うことができます。

      GREP_COLOR
             この変数は、パターンにマッチした            (空文字列ではない)            テキストを強調するために
             使用する色彩を指定します。                                                             GREP_COLORS
             変数を使用する方が望ましく、この変数は非推奨なのですが、今でも          使えないことはありません。
             GREP_COLORS  変数の  mt,  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
                    オプションを指定したときは、マッチしない行のことです)。     ただし、値に真偽値を取る     rv
                    機能とコマンドライン・オプションの                                                       -v
                    の両方を指定したときは、前後の文脈行扱いになるマッチする行に                 適用されます。
                    デフォルトは空です (すなわち、端末のデフォルトの背景色と 前景色の組み合わせ)。

             cx=    前後の文脈行全体に適用される   SGR   パラメータ   (前後の文脈行とは、コマンドラインで    -v
                    オプションを指定しなかったときは、マッチしない行、                                       -v
                    オプションを指定したときは、マッチする行のことです)。      ただし、値に真偽値を取る      rv
                    機能とコマンドライン・オプションの   -v  の両方を指定したときは、選択されるマッチしない行に
                    適用されます。           デフォルトは空です           (すなわち、端末のデフォルトの背景色と
                    前景色の組み合わせ)。

             rv     コマンドラインで  -v  が指定されているときに、 sl= と cx= 機能の意味を逆にする (入れ替える)
                    真偽値。 デフォルトは空です (すなわち、この機能は指定されていません)。

             mt=01;31
                    マッチする行ならどこでも、空文字列ではないマッチするテキストに適用される   SGR   パラメータ
                    (マッチする行は、コマンドラインで -v オプションを指定しなかったときは、選択される行になり、
                    -v  を指定したときは、前後の文脈行になります)。   この機能を設定するのは、   ms=   と   mc=
                    を同時に同じ値に設定するのと同じことです。
                    デフォルトは、カレント行の背景色に赤い前景色の太字になっています。

             ms=01;31
                    選択される行中の空文字列ではないマッチするテキストに適用される        SGR        パラメータ
                    (この機能が使用されるのは、コマンドラインで  -v  オプションを指定しないときだけです)。  sl=
                    機能             (rv             が設定されているときは、             cx=             機能)
                    の効果は、この機能を使用しても、相変わらず有効です。
                    デフォルトは、カレント行の背景色に赤い前景色の太字になっています。

             mc=01;31
                    前後の文脈行中の空文字列ではないマッチするテキストに適用される        SGR        パラメータ
                    (この機能が使用されるのは、コマンドラインで   -v  オプションが指定されているときだけです)。
                    cx=         機能          (rv          が設定されているときは、          sl=          機能)
                    の効果は、この機能を使用しても、相変わらず有効です。
                    デフォルトは、カレント行の背景色に赤い前景色の太字になっています。

             fn=35  表示される行の前にファイル名が付くとき、それに適用される          SGR          パラメータ。
                    デフォルトは、端末のデフォルトの背景色にマゼンタの前景色の文字です。

             ln=32  表示される行の前に行番号が付くとき、それに適用される            SGR            パラメータ。
                    デフォルトは、端末のデフォルトの背景色に緑の前景色の文字です。

             bn=32  表示される行の前にバイトオフセットが付くとき、それに適用される       SGR       パラメータ。
                    デフォルトは、端末のデフォルトの背景色に緑の前景色の文字です。

             se=36  区切り記号に適用される  SGR パラメータ。 区切り記号としては、選択される行のフィールド間には
                    ':'        を置き、         前後の文脈行のフィールド間には         '-'         を置きます。
                    前後の文脈行の表示が指定されているときは、隣接行グループの間に      '--'     を挿入します。
                    デフォルトは、端末のデフォルトの背景色にシアンの前景色の記号です。

             ne     真偽値です。通常、色付けされた項目が終わるたびに、  エスケープ・シーケンス  Erase  in  Line
                    (EL)        to        Right       (\33[K)       を使用して、行末まで消去しますが、       ne
                    を設定すると、それをやらなくなります。                  これは、端末が                   EL
                    をサポートしていない場合に必要です。     そのほか、     真偽値を取る     terminfo    の機能
                    back_color_erase (bce) を使用していない端末で、採用した強調色が背景に作用しない場合や、  EL
                    が遅すぎたり、画面にひどいチラつきを引き起こしたりする場合にも、 これの設定が役に立ちます。
                    デフォルトは false です (すなわち、この機能は設定されていません)。

             真偽値を取る機能には     =..      の部分がないことに注意してください。そうした機能はデフォルトでは
             設定されていず (すなわち、false)、設定されたとき true になります。

             使用しているテキスト端末の文書にある       Select       Graphic       Rendition      (SGR)      の
             セクションを見て、使用できる値や、それが文字属性として使われたときの意味を  調べてください。   SGR
             パラメータの値は十進法の整数であり、セミコロンで結合することができます。                      grep
             はそうしたセミコロンで結合された数字から完全な   SGR    シーケンス    (\33[...m)    を構成します。
             結合される値でよく使われるものを挙げると、  1  は太字、  4  は下線、  5 は点滅、 7 は反転です。 39
             はデフォルトの前景色、 30 から 37 は前景色、 90 から  97  は  16  色モードの前景色、  38;5;0  から
             38;5;255  は  88  色と 256 色モードの前景色に使われます。また、 49 はデフォルトの背景色であり、 40
             から 47 は背景色、 100 から 107 は 16 色モードの背景色、 48;5;0  から  48;5;255  は  88  色と  256
             色モードの背景色です。

      LC_ALL, LC_COLLATE, LANG
             こうした変数は     LC_COLLATE     カテゴリのロケールを指定します。     LC_COLLATE     は     [a-z]
             のような範囲式を解釈するときの照合順序を決めるものです。

      LC_ALL, LC_CTYPE, LANG
             こうした変数は LC_CTYPE カテゴリのロケールを指定します。  LC_CTYPE  は文字のタイプ、たとえば、空白
             (whitespace) に当たるのは どの文字とどの文字か、といったことを決めるものです。

      LC_ALL, LC_MESSAGES, LANG
             こうした変数は     LC_MESSAGES     カテゴリのロケールを指定します。     LC_MESSAGES     は    grep
             がメッセージに使う言語を決めるものです。                      デフォルトの                       C
             ロケールでは、アメリカ英語のメッセージが使用されます。

      POSIXLY_CORRECT
             これが設定されていると、        grep       は       POSIX.2       が要求するとおりの動作をします。
             設定されていない場合の動作は、ほかの     GNU     のプログラムに     より近いものです。     POSIX.2
             の規定では、ファイル名の後にオプションが現れた場合、
             それをファイル名として扱わなければならないことになっています。         これに対して、         grep
             のデフォルトでは、そうしたオプションを引き数リストの前の方に移動して、  オプションとして扱います。
             また、POSIX.2           の規定では、理解できないオプションは           “illegal”            (違法)
             と判断するようになっていますが、   そうしたオプションも法律に違反しているわけではないので、   grep
             のデフォルトでは、“invalid” (無効) という判断を下します。

返り値
      通常では、選択する行が見つかったときの終了ステータスは    0     であり、     見つからなかったときは     1
      です。エラーが起きた場合は、            -q            ,            --quiet           ,           --silent
      といったオプションが使われていて、しかも、選択する行が見つかったときを 除いて、終了ステータスは 2  です。
      しかしながら、POSIX  は grep, cmp, diff のようなプログラムに対して、 エラーが起きた場合の終了ステータスは
      2                  以上でなければならない、                  としか要求していないことに注意してください。
      ですから、移植性のためには、終了ステータスが                   2                   と厳密に一致することを
      調べるよりも、この一般的な条件をテストするロジックを使用した方が よいでしょう。

著作権
      Copyright 1998-2000, 2002, 2005-2010 Free Software Foundation, Inc.

      This is free software; see the source for copying  conditions.   There  is  NO  warranty;  not  even  for
      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

バグ
  バグの報告
      バグ報告は  <bug-grep@gnu.org>  宛に  E メールで送ってください。これはメーリングリストで、 下記がその Web
      ページです。
      <http://lists.gnu.org/mailman/listinfo/bug-grep>
      grep の Savannah バグ・トラッカーは下記にあります。
      <http://savannah.gnu.org/bugs/?group=grep>

  既知のバク
      {n,m}        を使って何度も繰り返しを行うと、        grep        は大量のメモリを消費するかもしれません。
      また、ほかの曖昧な正規表現にも、指数関数的な時間と           メモリ空間を要するものがあり、          grep
      がメモリ不足を起こすことがあります。

      後方参照は非常に遅く、とんでもなく時間がかかることがあります。

関連項目
  標準のマニュアルページ
      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 プログラマーズ・マニュアルページ
      grep(1p).

  TeXinfo 文書
      grep      のための充実した文書が、TeXinfo     マニュアルの形で保守されています。     info     と     grep
      プログラムが御使用のサイトにきちんとインストールされているならば、

             info grep

      とコマンドを打ち込むことで、完備したマニュアルが読めるはずです。

注記
      GNU's not Unix, but Unix is a beast; its plural form is Unixen.

訳者謝辞
      この翻訳は、FreeBSD   jpman   Project   <http://www.jp.freebsd.org/man-jp/>   から   Linux   JM   project
      に寄贈していただいたマニュアルを元にし、                          GNU                          grep-2.6.3
      所収のマニュアルに合わせて、増補・改訂したものです。     作業に当たっては、FreeBSD     jpman      Project
      の新しいマニュアルの翻訳も 参考にしました。上記の文書を翻訳なさった方々にお礼を申し上げます。

User Commands                                    GNU grep 2.6.3                                          GREP(1)
Manual page grep(1) line 518/575 (END) (press h for help or q to quit)