\input texinfo  @c -*-texinfo-*-
@c %**start of header
@setfilename grep-ja.info
@settitle grep, print lines matching a pattern
@c %**end of header

@c @documentlanguage ja

@c This file has the new style title page commands.
@c Run `makeinfo' rather than `texinfo-format-buffer'.

@c smallbook

@c tex
@c \overfullrule=0pt
@c end tex

@include grep-v.texi

@c Combine indices.
@syncodeindex ky cp
@syncodeindex pg cp
@syncodeindex tp cp

@defcodeindex op
@syncodeindex op fn
@syncodeindex vr fn

@ifinfo
@direntry
* grep(ja): (grep-ja).              print lines matching a pattern.
@end direntry
This file documents @command{grep}, a pattern matching engine.


Published by the Free Software Foundation,
59 Temple Place - Suite 330
Boston, MA 02111-1307, USA

Copyright 2000 Free Software Foundation, Inc.

Permission is granted to make and distribute verbatim copies of
this manual provided the copyright notice and this permission notice
are preserved on all copies.

@ignore
Permission is granted to process this file through TeX and print the
results, provided the printed document carries copying permission
notice identical to this one except for the removal of this paragraph
(this paragraph not being relevant to the printed manual).

@end ignore
Permission is granted to copy and distribute modified versions of this
manual under the conditions for verbatim copying, provided that the entire
resulting derived work is distributed under the terms of a permission
notice identical to this one.

Permission is granted to copy and distribute translations of this manual
into another language, under the above conditions for modified versions,
except that this permission notice may be stated in a translation approved
by the Foundation.
@end ifinfo

@setchapternewpage off

@titlepage
@title grep, searching for a pattern
@subtitle version @value{VERSION}, @value{UPDATED}
@author Alain Magloire et al.
@c 翻訳 西尾 太

@page
@vskip 0pt plus 1filll
Copyright @copyright{} 2000 Free Software Foundation, Inc.

@sp 2
Published by the Free Software Foundation, @*
59 Temple Place - Suite 330, @*
Boston, MA 02111-1307, USA

Permission is granted to make and distribute verbatim copies of
this manual provided the copyright notice and this permission notice
are preserved on all copies.

Permission is granted to copy and distribute modified versions of this
manual under the conditions for verbatim copying, provided that the entire
resulting derived work is distributed under the terms of a permission
notice identical to this one.

Permission is granted to copy and distribute translations of this manual
into another language, under the above conditions for modified versions,
except that this permission notice may be stated in a translation approved
by the Foundation.

@end titlepage
@page


@c @ifnottex
@ifinfo
@node Top
@top Grep

@command{grep}は，パターンに一致する行を探します．

このドキュメントは，@sc{gnu} @command{grep}の，バージョン@value{VERSION}
に対して作成されました．
@c @end ifnottex
@end ifinfo

@menu
* Introduction::                Introduction.
* Invoking::                    Invoking @command{grep}; description of options.
* Diagnostics::                 Exit status returned by @command{grep}.
* Grep Programs::               @command{grep} programs.
* Regular Expressions::         Regular Expressions.
* Usage::                       Examples.
* Reporting Bugs::              Reporting Bugs.
* Concept Index::               A menu with all the topics in this manual.
* Index::                       A menu with all @command{grep} commands
                                 and command-line options.
@end menu


@node Introduction
@chapter はじめに

@cindex Searching for a pattern.

@command{grep}は，与えられたパターンリストに一致するものを含む行を，入力
ファイルで検索します．行の中に一致しているものが見つかるとき，(デフォル
トで)標準出力，または，オプションで要求したあらゆる他の出力にコピーしま
す.

@command{grep}は，テキストでの一致を期待しますが，利用可能なメモリ以外に
入力行の長さの制限はなく，行の任意の文字に一致可能です．入力ファイルの最
後のバイトが改行では無い場合，@command{grep}は暗黙にそれを付加します．改
行は，パターンリストのセパレータでもあるので，テキストの改行文字に一致す
る方法はありません。

@node Invoking
@chapter @command{grep}の呼び出し

@command{grep}は，@sc{posix.2}と@sc{gnu}の拡張の，豊富なオプションセット
を持っています．

@table @samp

@item -c
@itemx --count
@opindex -c
@opindex -count
@cindex counting lines
標準的な出力を抑制します．代わりに，それぞれの入力ファイルに対し，一致し
た行数を出力します．@samp{-v}，@samp{--revert-match}オプションと併用した
場合，一致しない行を数えます．

@item -e @var{pattern}
@itemx --regexp=@var{pattern}
@opindex -e
@opindex --regexp=@var{pattern}
@cindex pattern list
@var{pattern}をパターンとして使います．@samp{-}で始まるパターンの保護に
役立ちます．

@item -f @var{file}
@itemx --file=@var{file}
@opindex -f
@opindex --file
@cindex pattern from file
1行毎に，@var{file}からパターンを得ます．空のファイルは，0個のパターンを
含むので，何にも一致しません．

@item -i
@itemx --ignore-case
@opindex -i
@opindex --ignore-case
@cindex case insensitive search
パターンと入力ファイルの両方で，大文字小文字の違いを無視します．

@item -l
@itemx --files-with-matches
@opindex -l
@opindex --files-with-matches
@cindex names of matching files
標準的な出力を抑制します．通常出力されている，それぞれの入力ファイルの名
前を，代わりに出力します．全てのファイルの走査は，最初に一致すると停止し
ます．

@item -n
@itemx --line-number
@opindex -n
@opindex --line-number
@cindex line numbering
入力ファイルの行番号を，それぞれの出力行の前に置きます．

@item -q
@itemx --quiet
@itemx --silent
@opindex -q
@opindex --quiet
@opindex --silent
@cindex quiet, silent
静かを意味します．通常の出力を抑制します．全てのファイルのスキャンは，最
初に一致すると停止します．@samp{-s}や@samp{--no-messages}オプションも参
照してください．

@item -s
@itemx --no-messages
@opindex -s
@opindex --no-messages
@cindex suppress error messages
存在しない，あるいは読み込みできないファイルについての，エラーメッセージ
を抑制します．移植性のメモ: 伝統的な@command{grep}は，@samp{-q}オプショ
ンが無く，@samp{-s}オプションは，@sc{gnu} @command{grep}の@samp{-q}オプ
ションのように動作するので，伝統的な@command{grep}は，@sc{gnu}
@command{grep}と異なり，@sc{posix.2}準拠ではありません．伝統的な
@command{grep}との移植性を考慮するシェルスクリプトは，@samp{-q}と
@samp{-s}を避け，代わりに@file{/dev/null}に，出力をリダイレクトするべき
です．

@item -v
@itemx --invert-match
@opindex -v
@opindex --invert-match
@cindex invert matching
@cindex print non-matching lines
一致するという意味を反転し，一致しない行を選択します．

@item -x
@itemx --line-regexp
@opindex -x
@opindex --line-regexp
@cindex match the whole line
正確に行全体が一致したもののみを選択します．

@end table

@section @sc{gnu}の拡張

@table @samp

@item -A @var{num}
@itemx --after-context=@var{num}
@opindex -A
@opindex --after-context
@cindex after context
@cindex context lines, after match
一致した行の後に，後ろの文脈を@var{num}行出力します．

@item -B @var{num}
@itemx --before-context=@var{num}
@opindex -B
@opindex --before-context
@cindex before context
@cindex context lines, before match
一致した行の前に，前の文脈を@var{num}行出力します．

@item -C @var{num}
@itemx --context=[@var{num}]
@opindex -C
@opindex --context
@cindex context
出力文脈の前後の(デフォルトで2)行を出力します．

@item -@var{num}
@opindex -NUM
@samp{--context=@var{num}}と同様に，前後の行を出力します．しかし，
@command{grep}は，与えられた行を，一度以上出力しません．

@item -V
@itemx --version
@opindex -V
@opindex --version
@cindex Version, printing
@command{grep}のバージョンナンバーを標準出力に出力します．このバージョン
ナンバーをすべてのバグレポートに含めてください．

@item --help
@opindex --help
@cindex Usage summary, printing
これらのコマンドラインオプションの概要の簡単な使用法メッセージと，バグレ
ポートのアドレスを出力して終了します．

@itemx --binary-files=@var{type}
@opindex --binary-files
@cindex binary files
ファイルの最初の数バイトで，ファイルがバイナリデータを含むことを示してい
る場合，ファイルの形式が@var{type}であると考えます．デフォルトで，
@var{type}は@samp{binary}で，@command{grep}は通常，バイナリファイルが一
致したことを告げる1行のメッセージの出力する，または，一致しない場合はな
にもメッセージを出力しないのどちらかです．@var{type}が
@samp{without-match}の場合，@command{grep}はバイナリファイルは一致しない
と考えます．これは@samp{-I}オプションと同じです．@var{type}が@samp{text} 
の場合，@command{grep}はバイナリファイルをテキストであるかのように処理し
ます．これは@samp{-a}オプションと同じです．@emph{警告:}
@samp{--binary-files=text}は，端末に出力されるバイナリのゴミを出力する可
能性があり，出力が端末で，且つ端末ドライバがそれをコマンドとして解釈した
場合，それは厄介な副作用となるはずです．

@item -b
@itemx --byte-offset
@opindex -b
@opindex --byte-offset
@cindex byte offset
それぞれの出力行の前に，入力ファイルのバイトオフセットを出力します．
@sc{ms-dos}やMS-Windowsで@command{grep}を実行するときは，
@samp{-u}(@samp{--unix-byte-offsets})オプションが使われているかどうかに
依存して，バイトオフセットを出力します．以下を参照してください．

@item -d @var{action}
@itemx --directories=@var{action}
@opindex -d
@opindex --directories
@cindex directory search
入力ファイルがディレクトリの場合，それを処理するために，@var{action}を使
います．デフォルトで@var{action}は@samp{read}で，それは，ディレクトリが
普通のファイルであるかのように読まれることを意味します(オペレーティング
システムとファイルシステムによってはこれができないものもあり，
@command{grep}は全てのディレクトリに対しエラーメッセージを出力します)．
@var{action}が@samp{skip}の場合，ディレクトリは暗黙にスキップされます．
@var{action}が@samp{recurse}の場合，@command{grep}はそれぞれのディレクト
リ下の全てのファイルを再帰的に読み込みます．これは，@samp{-r}オプション
と同じです．

@item -H
@itemx --with-filename
@opindex -H
@opindex --With-filename
@cindex with filename prefix
それぞれの一致に対し，ファイル名を出力します．

@item -h
@itemx --no-filename
@opindex -h
@opindex --no-filename
@cindex no filename prefix
複数のファイルが検索されているとき，出力の前のファイル名を抑制します．

@item -L
@itemx --files-without-match
@opindex -L
@opindex --files-without-match
@cindex files which don't match
標準的な出力を抑制します．通常，出力されないそれぞれの入力ファイル名
@footnote{訳注:一致する行を含まないファイルという意味．}を，代わりに出力
します．全てのファイルのスキャンは，最初に一致すると停止します．

@item -a
@itemx --text
@opindex -a
@opindex --text
@cindex suppress binary data
@cindex binary files
バイナリファイルをテキストファイルであるかのように処理します．これは，
@samp{--binary-files=text}オプションと同じです．

@item -I
バイナリファイルを，一致データを含まないものとして処理します．これは
@samp{--binary-files=without-match}オプションと同じです．

@item -w
@itemx --word-regexp
@opindex -w
@opindex --word-regexp
@cindex matching whole words
単語全体が一致しているものを含む行のみを選択します．一致しているサブ文字
列が，行の最初，または，単語を構成しない文字が前にあるかのどうかを調べま
す．同様に，行の最後，または，単語を構成しない文字が後に続くかどうかを調
べます．単語を構成する文字は，文字，数字と，アンダースコアです．

@item -r
@itemx --recursive
@opindex -r
@opindex --recursive
@cindex recursive search
@cindex searching directory trees
コマンド行にあるそれぞれのディレクトリに対し，そのディレクトリの全てのファ
イルを再帰的に読み込み処理します．これは，@samp{-d recurse}オプションと
同じです．

@item -y
@opindex -y
@cindex case insensitive search, obsolete option
@samp{-i}に対する時代遅れの同義語です．

@item -U
@itemx --binary
@opindex -U
@opindex --binary
@cindex DOS/Windows binary files
@cindex binary files, DOS/Windows
ファイルをバイナリとして扱います．デフォルトで，@sc{ms-dos}とMS-Windows 
では，@command{grep}は，ファイルから読み込んだ最初の32kBの内容を見てファ
イル形式を推測します．@command{grep}が，ファイルをテキストファイルだと決
定した場合，元ファイルの内容から@code{CR}文字を取ります(@code{^}と
@code{$}を使った正規表現が正確に働くためです)．@samp{-U}で指定してこの推
測を覆す場合，全てのファイルは読み込まれ，逐語的に一致検索する方式に渡さ
れ，ファイルのそれぞれの行の終りが@code{CR/LF}の組のテキストファイルの場
合，失敗する正規表現も出てきます．このオプションは，@sc{ms-dos}と
MS-Windowsのみでサポートされています．

@item -u
@itemx --unix-byte-offsets
@opindex -u
@opindex --unix-byte-offsets
@cindex DOS byte offsets
@cindex byte offsets, on DOS/Windows
Unix形式のバイトオフセットを報告します．これで@command{grep}は，ファイル
があたかもUnixスタイルのファイルであるかのように，バイトオフセットを報告
するよう切替えます．すなわち，バイトオフセットは，取り除かれた@code{CR} 
文字を無視します．これは，Unixマシンで@command{grep}を実行するのと同じ結
果を生成します．このオプションは，@samp{-b}オプションと一緒に使用しない
限り効果がありません．@sc{ms-dos}とMS-Windows以外のプラットホームでは効
果がありません．

@item --mmap
@opindex --mmap
@cindex memory mapped input
可能な場合，入力を読む際，デフォルトの@code{read}システムコールの代わり
に，@code{mmap}システムコールを使用します．@samp{--mmap}が，良いパフォー
マンスを与える場合もあります．しかし，@command{grep}処理中に入力ファイル
が小さくなる場合や，I/Oエラーが生じた場合，@samp{--mmap}は，(coreの吐き
出しを含め)未定義の動作をすることもあります．

@item -Z
@itemx --null
@opindex -Z
@opindex --null
@cindex zero-terminated file names
通常ファイル名に続く文字の代わりに，0バイト(@sc{ascii}の@code{NUL}文字) 
を出力します．例えば，@samp{grep -lZ}は，それぞれのファイル名の後，通常
の改行の代わりに，0バイトを出力します．このオプションは，ファイル名が改
行のような普通でない文字を含む場合でも出力を曖昧にしません．このオプショ
ンは，改行文字を含むような任意のファイル名を処理するとき使用する，
@samp{find -print0}，@samp{perl -0}，@samp{sort -z}と@samp{xargs -0}のよ
うなコマンドとともに使用されます．

@item -z
@itemx --null-data
@opindex -z
@opindex --null-data
@cindex zero-terminated lines
それぞれの行は，改行の代わりに0バイト(@sc{ascii}の@code{NUL}文字)で終端
され，入力を1行として扱います．@samp{-Z}や@samp{--null}オプションのよう
に，このオプションは，任意のファイル名を処理する際の@samp{sort -z}のよう
なコマンドとともに使用されます．

@end table

@command{grep}一致エンジンの変形を使用するかどうかを制御する，追加のオ
プションもあります．@xref{Grep Programs}.

@section 環境変数

@command{grep}の動作は，以下の環境変数に影響されます．

@cindex environment variables

@table @code

@item GREP_OPTIONS
@vindex GREP_OPTIONS
@cindex default options environment variable
この変数は，あらゆる明確なオプションの前に置く，デフォルトオプションを指
定します．例えば，@code{GREP_OPTIONS}が
@samp{--binary-files=without-match --directories=skip} の場合，
@command{grep}は，2つのオプション@samp{--binary-files=without-match}と
@samp{--directories=skip}が，明確なオプションの前に指定されているように
動作します．オプション指定は，空白で分割します．バックスラッシュは次の文
字をエスケープするので，空白やバックスラッシュを含むオプションを指定する
とき使用することができます．

@item LC_ALL
@itemx LC_MESSAGES
@itemx LANG
@vindex LC_ALL
@vindex LC_MESSAGES
@vindex LANG
@cindex language of messages
@cindex message language
@cindex national language support
@cindex NLS
@cindex translation of message language
これらの変数は@code{LC_MESSAGES}ロケールを指定し，それは，@command{grep} 
がメッセージで使用する言語を決定します．ロケールは，設定されたこれらの変
数で最初に決定されます．これらの環境変数が設定されていない場合や，メッセー
ジカタログがインストールされていない場合や，@command{grep}が国際言語サポー
ト(@sc{nls})でコンパイルされていない場合，アメリカ英語が使用されます．

@item LC_ALL
@itemx LC_CTYPE
@itemx LANG
@vindex LC_ALL
@vindex LC_CTYPE
@vindex LANG
@cindex character type
@cindex national language support
@cindex NLS
これらの変数は@code{LC_CTYPE}ロケールを指定し，それは例えば，どの文字が
空白となるかといった，文字の型を決定します．ロケールは，設定されたこれら
の変数で最初に決定されます．これらの環境変数が設定されていない場合や，ロ
ケールカタログがインストールされていない場合や，@command{grep}が国際言語
サポート(@sc{nls})でコンパイルされていない場合，@sc{posix}ロケールが使用
されます．

@item POSIXLY_CORRECT
@vindex POSIXLY_CORRECT
設定されている場合，@command{grep}は，@sc{posix.2}で要求されているように
動作します．そうでない場合，@command{grep}は，他の@sc{gnu}プログラムのよ
うに動作します．@sc{posix.2}は，ファイル名が続くオプションは，ファイル名
として扱う必要があると要求します．デフォルトで，そのようなオプションは，
オペランドリストの前に順序を変え，オプションとして扱われます．また，
@sc{posix.2}は，理解できなかったオプションを「不正」と診断することも要求
しますが，本当に規則に反しているわけではないので，デフォルトでは「無効」
と診断されます．@code{POSIXLY_CORRECT}は，以下で述べる
@code{_@var{N}_GNU_nonoption_argv_flags_}も使用できないようにします．

@item _@var{N}_GNU_nonoption_argv_flags_
@vindex _@var{N}_GNU_nonoption_argv_flags_
(ここで，@code{@var{N}}は，@command{grep}のプロセスID番号です．)この環境
変数の値の@var{i}番目の文字が@samp{1}の場合，@command{grep}の@var{i}番目
のオペランドは，明らかにそうであってもオプションと考えません．シェルは，
実行するそれぞれのコマンドに対し，この変数を環境に置くことができ，それを
指定すると，オペランドはワイルドカードを展開したファイル名の結果となり，
そのため，オプションとして扱われません．この動作は，@sc{gnu}Cライブラリ
のみで，@code{POSIXLY_CORRECT}がセットされていないときのみ利用可能です．

@end table

@node Diagnostics
@chapter 診断

通常，一致したものが見つかった場合，終了ステータスは0で，一致したものが
見つからない場合，1です(@samp{-v}オプションは，終了ステータスの意味が反
転します)．パターン内の構文エラーや，アクセスできない入力ファイルや，他
のシステムエラーがある場合，終了ステータスは2です．

@node Grep Programs
@chapter @command{grep}プログラム

@command{grep}は，指名された入力ファイル(または，ファイルが指名されない
場合や，@file{-}という名前のファイルが与えられた場合は標準入力)で，与え
られたパターンに一致したものを含む行を探します．デフォルトで，
@command{grep}は一致した行を出力します．3つの主要な@command{grep}の変形
があり，以下のオプションで制御されます．

@table @samp

@item -G
@itemx --basic-regexp
@opindex -G
@opindex --basic-regexp
@cindex matching basic regular expressions
基本的な正規表現としてパターンを解釈します．これはデフォルトです．

@item -E
@itemx --extended-regexp
@opindex -E
@opindex --extended-regexp
@cindex matching extended regular expressions
拡張された正規表現として，パターンを解釈します．

@item -F
@itemx --fixed-strings
@opindex -F
@opindex --fixed-strings
@cindex matching fixed strings
改行で分けられた固定文字列のリストとしてパターンを解釈し，それはどれにで
も一致します．

@end table

さらに，2つの変形プログラム，@command{egrep}と@command{fgrep}が利用可能
です． @command{egrep}は，@samp{grep -E}と同じです．@command{fgrep}は，
@samp{grep -F}と同じです．

@node Regular Expressions
@chapter 正規表現
@cindex regular expressions

@dfn{正規表現}は，文字列のセットを記述するパターンです．正規表現は，より
小さな表現を統合する，様々なオペレータを使った算数的な表現で，同様に組み
立てられます．@command{grep}は，2つの異なるバージョンの正規表現構文，`` 
基本''と``拡張''を理解します．@sc{gnu} @command{grep}では，どちらの構文
を使っても，利用可能な機能に違いはありません．他のインプリメンテーション
では，基本正規表現はそんなに強力ではありません．以下の記述は，拡張正規表
現に当てはまります．基本正規表現との違いは，後で要約します．

基本的な構築ブロックは，一文字に一致する正規表現です．すべての文字と数字
を含むほとんどの文字は，自分自身に一致する正規表現です．特殊な意味を持つ
あらゆるメタ文字は，バックスラッシュを前に置くことで引用可能です．
@samp{[}と@samp{]}で囲まれた文字のリストは，リストのあらゆる一文字と一致
します．リストの最初の文字がキャレット@samp{^}の場合，リストに
@strong{ない}あらゆる文字に一致します．例えば，正規表現
@samp{[0123456789]}は，あらゆる数字に一致します．文字の範囲は，ハイフン
で分けられた，最初と最後の文字を与えることで指定できます．

終りに，文字の命名されたクラスは，以下のように前もって定義されています．
その解釈は@code{LC_CTYPE}ロケールに依存します．以下の解釈は@sc{posix} ロ
ケールのもので，@code{LC_CTYPE}ロケールがない場合，デフォルトとなります．

@cindex classes of characters
@cindex character classes
@table @samp

@item [:alnum:]
@opindex alnum
@cindex alphanumeric characters
英数文字： @samp{[:alpha:]}と@samp{[:digit:]}．

@item [:alpha:]
@opindex alpha
@cindex alphabetic characters
アルファベット文字： @samp{[:lower:]}と@samp{[:upper:]}．

@item [:blank:]
@opindex blank
@cindex blank characters
空白文字： スペースとタブ．

@item [:cntrl:]
@opindex cntrl
@cindex control characters
コントロール文字．@sc{ascii}では，これらの文字は8進数コードで，000から
037までと177 (@code{DEL})です．その他の文字セットでは，それが何であれ，
文字と同じです．

@item [:digit:]
@opindex digit
@cindex digit characters
@cindex numeric characters
数字： @code{0 1 2 3 4 5 6 7 8 9}．

@item [:graph:]
@opindex graph
@cindex graphic characters
グラフィック文字： @samp{[:alnum:]}と@samp{[:punct:]}．

@item [:lower:]
@opindex lower
@cindex lower-case letters
小文字：@code{a b c d e f g h i j k l m n o p q r s t u v w x y z}．

@item [:print:]
@opindex print
@cindex printable characters
Printable characters:
印刷可能な文字： @samp{[:alnum:]}，@samp{[:punct:]}，そしてスペース．

@item [:punct:]
@opindex punct
@cindex punctuation characters
句読点文字：@code{!@: " # $ % & ' ( ) * + , - .@: / : ; < = > ?@: @@ [ \
] ^ _ ` @{ | @} ~}．

@item [:space:]
@opindex space
@cindex space characters
@cindex whitespace characters
スペース文字： タブ，改行，垂直タブ，フォームフィード，キャリッジリター
ン，そしてスペース．

@item [:upper:]
@opindex upper
@cindex upper-case letters
大文字： @code{A B C D E F G H I J K L M N O P Q R S T U V W X Y Z}.

@item [:xdigit:]
@opindex xdigit
@cindex xdigit class
@cindex hexadecimal digits
16進数： @code{0 1 2 3 4 5 6 7 8 9 A B C D E F a b c d e f}.

@end table
例えば，@samp{[[:alnum:]]}は@samp{[0-9A-Za-z]}を意味しますが，後者の書式
は，@sc{posix}ロケールと@sc{ascii}文字の符号化に依存し，前者はロケールと
文字セットに依存しません．(これらのクラス名のカッコはジンボル名の一部で，
追加時には，カッコのリストを範囲を定めるカッコを含める必要があることに注
意してください)．ほとんどのメタ文字は，リスト内で特殊な意味を失います．
リテラル@samp{]}を含めるため，それをリストの最初に置いてください．同様に，
リテラル@samp{^}を含めるため，最初以外の場所に置いてください．終りに，リ
テラル@samp{-}を含めるため，最後に置いてください．

ピリオド@samp{.}はあらゆる一文字に一致します．シンボル@samp{\w}は
@samp{[[:alnum:]]}の同義語で，@samp{\W}は@samp{[^[:alnum]]}の同義語です．

キャレット@samp{^}と ドル記号@samp{$}は，それぞれ，行の最初と最後の空の
文字列に一致するメタ文字です．シンボル@samp{\<}と@samp{\>}は，それぞれ，
単語の最初と最後の空の文字列に一致します．@samp{\b}は，単語の端の空の文
字列に一致し，@samp{\B}は，単語の端ではない，空の文字列に一致します．

正規表現は，繰り返しオペレーターの1つを続けることができます．

@table @samp

@item ?
@opindex ?
@cindex question mark
@cindex match sub-expression at most once
前のアイテムはオプションで，1回以下に一致します．

@item *
@opindex *
@cindex asterisk
@cindex match sub-expression zero or more times
前のアイテムの0回以上に一致します．

@item +
@opindex +
@cindex plus sign
前のアイテムの1回以上に一致します．

@item @{@var{n}@}
@opindex @{n@}
@cindex braces, one argument
@cindex match sub-expression n times
前のアイテムの，正確に@var{n}回に一致します．

@item @{@var{n},@}
@opindex @{n,@}
@cindex braces, second argument omitted
@cindex match sub-expression n or more times
前のアイテムのn回以上に一致します．

@item @{@var{n},@var{m}@}
@opindex @{n,m@}
@cindex braces, two arguments
前のアイテムの，最低@var{n}回以上，@var{m}回以下に一致します．

@end table

2つの正規表現は連結できます．その結果の正規表現は，それぞれ連結されたサ
ブ表現に一致する，2つのサブ文字列を連結した形式の，あらゆる文字列に一致
します．

2つの正規表現は，インフィクスオペレータ@samp{|}で連結することができます．
その結果の正規表現は，サブ表現のどちらかに一致する，あらゆる文字列に一致
します．

繰り返しは連結に優先し，それは交互に優先されます．これらの優先規則に優
先させるため，サブ表現全体を丸カッコで囲むことができます．

後方参照@samp{\@var{n}}は，@var{n}が一桁の場合，丸カッコで囲われている正
規表現のサブ表現を，前で@var{n}番目に一致した，サブ文字列に一致します
@footnote{訳注:JMでの例は，「`su(momo)mo\1mo\1nouti'は，
`sumomomomomomomomonouti'に一致します」となっています}．

@cindex basic regular expressions
基本的な正規表現で，メタ文字@samp{?}，@samp{+}，@samp{@{}， @samp{|}，
@samp{(}と，@samp{)}は，特別な意味を失います．代わりに，バックスラッシュ
バージョンの@samp{\?}，@samp{\+}，@samp{\@{}， @samp{\|}，@samp{\(}と，
@samp{\)}を使ってください．

@cindex interval specifications
伝統的な@command{egrep}は，メタ文字@samp{@{}をサポートしておらず，
@samp{\@{}をサポートする@command{egrep}のインプリメントもあります．その
ため，移植可能なスクリプトでは，@samp{egrep}のパターンで@samp{@{}を避け，
リテラル@samp{@{}に一致する@samp{[@{]}を使うべきです．

@sc{gnu} @command{egrep}は，無効な間隔の指定で始まる場合，@samp{@{}は特
別でないものとして，伝統的な使用のサポートを試みます．例えば，シェルコマ
ンド@samp{egrep '@{1'}は，正規表現の構文エラーを報告する代わりに，2文字
の文字列@samp{@{1}を検索します．@sc{posix.2}は，拡張としてのこの動作を許
可しますが，移植可能なスクリプトでは避けるべきです．

@node Usage
@chapter 使用法

@cindex Usage, examples
ここに，@sc{gnu} @command{grep}を呼び出す，シェルコマンドの例があります．

@example
grep -i 'hello.*world' menu.h main.c
@end example

@noindent
これは，@file{menu.h}と@file{main.c}で，文字列@samp{world}が続く文字列
@samp{hello}を含む，全ての行をリストアップします．これは，@samp{.*}が，
行の0以上の文字に一致するためです．@xref{Regular Expressions}.
@samp{-i}オプションは，@command{grep}に大文字小文字を無視させ，
@samp{Hello, world!}に一致させます．そうしなければ一致しません．
@command{grep}の呼び出し方の詳細は，@xref{Invoking}.

@cindex Using @command{grep}, Q&A
@cindex FAQ about @command{grep} usage
ここに，@command{grep}の使用法に関する，共通の質問と回答があります．

@enumerate

@item
一致したファイルの名前のみリストアップするには，どうしたら良いのですか?

@example
grep -l 'main' *.c
@end example 

@noindent
カレントディレクトリで，内容に@samp{main}があるCファイルの名前をリストアッ
プします．

@item
ディレクトリを再帰的に検索するには，どうしたら良いのですか?

@example
grep -r 'hello' /home/gigi
@end example

@noindent
@samp{hello}を，ディレクトリ@file{/home/gigi}の下の，全てのファイルで検
索します．検索ファイルをもっと制御するために，@command{find}，
@command{grep}と，@command{xargs}を使ってください．例えば，以下のコマン
ドはCファイルのみを検索します．

@smallexample
find /home/gigi -name '*.c' -print | xargs grep 'hello' /dev/null
@end smallexample

@item
パターンが@samp{-}で始まる場合，どうすれば良いのでしょうか?

@example
grep -e '--cut here--' *
@end example 

@noindent
@samp{--cut here--}に一致する全ての行を検索します．@samp{-e}がない場合，
@command{grep}は，@samp{--cut here--}をオプションのリストとして，分割し
ようとします．

@item
単語の一部ではなく，単語全体を検索したいのですが?

@example
grep -w 'hello' *
@end example

@noindent
単語全体で@samp{hello}となるもののみを検索します．@samp{Othello}には一致
しません．より制御するため，単語の最初と最後に一致する，@samp{\<}と
@samp{\>}を使ってください．例えば，以下のようにします．

@example
grep 'hello\>' *
@end example

@noindent
@samp{hello}で終る単語のみを検索するので，単語@samp{Othello}に一致します．

@item
一致した行の周りの文脈を出力するには，どうしたら良いのでしょうか?

@example
grep -C 2 'hello' *
@end example

@noindent
一致した行の周りの文を，それぞれ2行出力します．

@item
@command{grep}で強制的にファイル名を出力するにはどうしたら良いのでしょう
か?

@file{/dev/null}を加えてください．

@example
grep 'eli' /etc/passwd /dev/null
@end example

@item
@command{ps}出力で，奇妙な正規表現をなぜ使うのですか?

@example
ps -ef | grep '[c]ron'
@end example

パターンが角カッコなしで書かれている場合，@command{ps}出力行の
@command{cron}だけでなく，@command{ps}出力の@command{grep}にも一致します．

@item
@command{grep}は「バイナリファイルの一致」をなぜ報告するのですか?

@command{grep}が，バイナリファイルから全ての一致@strong{行}をリストアッ
プした場合，生成された出力はおそらく役に立たず，ディスプレイにゴミを撒き
散らすでしょう．そのため，@sc{gnu} @command{grep}は，明らかなバイナリファ
イルからの出力は抑制します．明らかなバイナリファイルからも，@sc{gnu}
@command{grep}の出力を強制させるため，@samp{-a}や
@samp{--binary-files=text}オプションを使用してください．``Binary file
matches''メッセージをエミュレートするため，@samp{-I}や
@samp{--binary-files=without-match}オプションを使用してください．

@item
@samp{grep -lv}は，なぜ一致しないファイル名を出力しないのですか?

@samp{grep -lv}は，1つ以上一致していない行を含む，全てのファイル名をリス
トアップします．一致行がない全てのファイル名をリストアップするために，
@samp{-L}や@samp{--files-without-match}オプションを使ってください．

@item
@sc{or}は@samp{|}でできますが，@sc{and}はどうするのですか?

@example
grep 'paul' /etc/motd | grep 'franc,ois'
@end example

@noindent
@samp{paul}と@samp{franc,ois}の両方を含む全ての行を検索します．

@item
標準入力とファイルの両方を，どうすると検索できますか?

ファイル名@samp{-}の指定を使用してください．

@example
cat /etc/passwd | grep 'alain' - /etc/motd
@end example
@end enumerate

@node Reporting Bugs
@chapter バグの報告

@cindex Bugs, reporting
バグの報告は，@email{bug-gnu-utils@@gnu.org}に電子メールを送ってください．
``Subject:''フィールドのどこかに，単語``grep''があることを確かめてくださ
い．

@samp{@{m,n@}}の大きな繰り返し回数で，@command{grep}が多くのメモリを使う
可能性があります．さらに，特定のその他の曖昧な正規表現は，指数関数的な時
間と空間を要求し，@command{grep}の実行はメモリ不足になる可能性があります．
後方参照は大変遅く，指数関数的な時間を必要とする可能性があります．

@page
@node Concept Index
@unnumbered 概念による索引

これは，@command{grep}コマンドとコマンドラインオプション以外の，このマニュ
アルで述べられている，全ての問題の，一般的な索引です．

@printindex cp

@page
@node Index
@unnumbered 索引

これは，全ての@command{grep}コマンド，コマンドラインオプションと，環境変
数の，アルファベット順のリストです．

@printindex fn

@contents
@bye
