日本語 man コマンド類 (ja-man-1.1j_5) と日本語 man ドキュメント (ja-man-doc-5.4 (5.4-RELEASE 用) など) をインストールすると、以下のような man コマンド閲覧、キーワード検索が コンソールからできるようになります。
4.11-RELEASE-K, 5.4-RELEASE-K, 5.5-RELEASE-K, 6.0-RELEASE-K から 6.4-RELEASE-K, 7.0-RELEASE-K から 7.2-RELEASE-K, 8.0-RELEASE-K は、プライベート版 (小金丸が編集してまとめたもの) ですが、 より多くの翻訳したファイルが含まれています。 (5.4-RELEASE-K から 6.4-RELEASE-K, 7.0-RELEASE-K から 7.2-RELEASE-K, 8.0-RELEASE-K は、全翻訳済み)
6.4-STABLE-K, 7.2-STABLE-K, 8.0-STABLE-K は現在、 作成中で日々更新されています。 最新の snapshots を元に作成しています。
GREP(1) GREP(1)
名称
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 つ の プログラム egrep と fgrep を利用可能です。 egrep は
grep -E と同じです。 fgrep は grep -F と同じです。 zgrep は grep -Z と
同 じです。 zegrep は grep -EZ と同じです。 zfgrep は grep -FZ と同じで
す。
オプション
-A NUM, --after-context=NUM
NUM で指定した行数だけ、パターンにマッチした行の後の行も表示しま
す。
-a, --text
バイナリファイルをテキストファイルであるかのように処理します。こ
れは --binary-files=text オプションと等価です。
-B NUM, --before-context=NUM
NUM で指定した行数だけ、パターンにマッチした行の前の行も表示しま
す。
-C [NUM], -NUM, --context[=NUM]
NUM で指定した行数 (デフォルトは 2) だけ、パターンにマッチした行
の前後の行も表示します。
-b, --byte-offset
各出力行の前に、入力ファイルの先頭からのバイト単位のオフセットを
表示します。
--binary-files=TYPE
ファイルの最初の数バイトが、ファイルの内容がバイナリファイルであ
ることを示す場合、ファイルのタイプを TYPE であると仮定します。デ
フォルトでは TYPE は binary であり、 grep は通常、バイナリファイ
ルの一致を示す一行メッセージを表示するか、マッチしない場合にはな
に も表示しません。 TYPE が without-match の場合、 grep はバイナ
リファイルはマッチしないものと仮定します。これは -I オプションと
等価です。 TYPE が text の場合、 grep はバイナリファイルをテキス
トであるかのように扱います。これは -a オプションと等価です。 警
告: grep --binary-files=text はバイナリのゴミを表示する可能性が
あります。出力先が端末である場合で、端末ドライバがこのゴミの一部
をコマンドであると解釈する場合、このゴミが悪い副作用をおよぼす可
能性があります。
-c, --count
通常の出力はせず、各入力ファイルについてマッチした行数を表示しま
す。 -v, --invert-match オプションと共に指定した場合は、マッチし
なかった行数を表示します (下記参照)。
-d ACTION, --directories=ACTION
入力ファイルがディレクトリの場合に、 ACTION を使ってその処理を行
います。デフォルトでは ACTION は read であり、ディレクトリを普通
のファイルであるかの様に読み取る事を意味します。 ACTION が skip
な ら、ディレクトリを黙って読み飛ばします。 ACTION が recurse な
ら、 grep は各ディレクトリ下のすべてのファイルを再帰的に読み取り
ます。これは -r オプションと等価です。
-E, --extended-regexp
PATTERN を拡張された正規表現として扱います (下記参照)。
-e PATTERN, --regexp=PATTERN
PATTERN をパターンとして指定します。 - で始まるパターンを保護す
るために有効です。
-F, --fixed-strings
PATTERN を改行で区切られた固定文字列のリストとして扱います。その
文字列のどれかとマッチするかを調べます。
-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
通常の出力はせず、このオプションを指定しなかったときに出力される
入力ファイルの名前を表示します。スキャン動作は最初のマッチで終了
します。
--mmap 可能ならば、デフォルトの read(2) システム コー ル の 代 わ り に
mmap(2) システムコールを使って入力を読み取ります。ある状況におい
て、 --mmap はよりよい性能をもたらします。しかし、 grep の動作中
に 入力ファイルが小さくなるか、または I/O エラーが生じた場合に、
--mmap は (コアダンプを含む) 未定義の動作を引き起こす可能性が あ
ります。
-n, --line-number
各出力行の前に、入力ファイルにおける行番号を表示します。
-q, --quiet, --silent
沈黙。通常の出力を抑止します。スキャン動作は最初のマッチで終了し
ます。下記の -s や --no-messages オプションも参照。
-r, --recursive
各ディレクトリ下のすべてのファイルを再帰的に読み取ります。これは
-d recurse オプションと等価です。
-s, --no-messages
指定されたファイルが存在しないことや読み込みできないことを示すエ
ラーメッセージを抑止します。移植性に関する注: GNU grep とは異 な
り、 伝 統 的な grep は POSIX.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
文字にマッチします。文字の範囲は最初と最後の文字をハイフン (`-') でつな
ぐことで指定できます。最後に、特定の名前を持つ文字クラスがあらかじめ 定
義 さ れ て い ま す。 名 前 が 内容を示しており、それらは、 [:alnum:],
[:alpha:], [:cntrl:], [:digit:], [:graph:], [:lower:], [:print:],
[:punct:], [:space:], [:upper:], [:xdigit:] です。例えば、 [[:alnum:]]
は [0-9A-Za-z] と同じですが、後者は POSIX ロケールや 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_OPTIONS
この変数は明示的なオプションの前に指定されるデフォルトオプション
を指定します。例えば、もし GREP_OPTIONS が '--binary-files=with-
out-match --directories=skip' である場合、 grep は 2 つ の オ プ
ション --binary-files=without-match と --directories=skip が明示
的なオプションの前に指定されている様に動作します。オプションの指
定 は 空白によって区切られます。バックスラッシュは次の文字をエス
ケープします。これは空白やバックスラッシュを含むオプションを指定
するために用いられます。
LC_ALL, LC_MESSAGES, LANG
これらの変数は grep がメッセージに使用する言語を決定する LC_MES-
SAGES を指定します。ロケールはこれらの変数のうち最初に設定されて
いるものにより決定されます。もしこれらの変数全てが設定されていな
い場合、またはメッセージカタログがインストールされていない場合、
ま たは grep が国際言語サポートつき (NLS) でコンパイルされてない
場合には、アメリカンイングリッシュが用いられます。
LC_ALL, LC_CTYPE, LANG
これらの変数は、例えばどの文字が空白であるかなど、文字の種類を決
定する LC_CTYPE を指定します。ロケールはこれらの変数のうち最初に
設定されているものにより決定されます。もしこれらの変数全てが設定
されていない場合、またはメッセージカタログがインストールされてい
ない場合、または grep が国際言語サポートつき (NLS) でコンパイ ル
されてない場合には、 POSIX ロケールが用いられます。
POSIXLY_CORRECT
設 定されている場合、 grep は POSIX.2 として動作し、それ以外の場
合は grep は他の GNU プログラムのように動作します。 POSIX.2 では
ファ イ ル名の後に続くオプションはファイル名として扱われます。デ
フォルトでは、このようなオプションはオペランドリストの先頭に並び
変えられて、オプションとして扱われます。また、POSIX.2 では認識で
きないオプションは " 不法 (illegal)" であると診断されますが、 法
律 に 違 反しているわけではないので、デフォルトではこれらは"不正
(invalid)" であると診断されます。
診断
通常、パターンにマッチした行が見つかった場合は 0 を、見つからなかった場
合 は 1 を返します。(ただし、 -v オプションを指定した場合は、逆になりま
す。) パターンに文法エラーが存在したり、入力ファイルにアクセスできな い
などのシステムエラーが発生した場合は、2 を返します。
バグ
バ グ レ ポートは、 bug-gnu-utils@gnu.org まで Email してください。この
時、"Subject:" のどこかに "grep" という単語を忘れずに入れてください。
{m,n} の表現で非常に大きな繰り返しを指定すると、非常に多くのメモリを 消
費 します。さらに、ある種のあいまいな正規表現を指定すると、必要となる時
間とメモリ領域は指数的に増大し、 grep がメモリ不足を起こす可能性があ り
ます。
後方参照は非常に動作が遅く、必要となる時間は指数的に増大します。
GNU Project 2000/06/09 GREP(1)