grep, egrep, fgrep -
パターンにマッチする行を表示する
grep [
OPTIONS]
PATTERN [
FILE...]
grep [
OPTIONS] [
-e PATTERN |
-f FILE]
[
FILE...]
grep は
FILE
で名前を指定されたファイルを検索して、与えられた
PATTERN
にマッチする部分を含む行を探します。
ファイルが指定されていない場合や、
ファイル名の代わりに
1 個のマイナス記号
“
-”
が指定されている場合は、
grep
は標準入力から検索します。
デフォルトでは、
grep
はマッチした行を表示します。
さらに、兄弟プログラム
egrep と
fgrep
は、それぞれ
grep -E
と
grep -F
と同じです。
これらの兄弟プログラムは非推奨ですが、後方互換性のために用意されています。
- --help
- 使用法を出力して終了します。
-
-V, --version
-
grep
のバージョン番号を出力して終了します。
-
-E, --extended-regexp
-
PATTERN
を拡張正規表現 (ERE)
として扱います
(下記参照)。
-
-F, --fixed-strings
-
PATTERN
を改行で区切られた固定文字列
(正規表現のかわりに)
のリストとして扱い、
その文字列のいずれかとマッチするかどうかを調べます。
-
-G, --basic-regexp
-
PATTERN
を基本正規表現 (BRE)
として扱います
(下記参照)。これがデフォルトです。
-
-P, --perl-regexp
- パターンを Perl
互換の正規表現 (PCRE)
として扱います。
きわめて実験的なものなので、
grep -P
を使うと、その機能は実装されていませんという
警告が出るかもしれません。
-
-e PATTERN,
--regexp=PATTERN
-
PATTERN
をパターンとして指定します。
このオプションを複数回使ったときや、
-f (--file)
オプションと組み合わせたときは、与えられたすべてのパターンを検索します。
このオプションは、ハイフン
“-”
で始まるパターンを保護するのにも使えます。
-
-f FILE, --file=FILE
- パターンを FILE
から 1 行 1
パターンとして読み込みます。
このオプションを複数回使ったときや、
-e (--regexp)
オプションと組み合わせたときは、与えられたすべてのパターンを検索します。
空のファイルはパターンを含まないので、何にもマッチしません。
-
-i, --ignore-case
-
PATTERN
と入力ファイルの双方で、アルファベットの大文字と小文字を
区別しないようにします。
-
-v, --invert-match
- マッチの意味を逆にして、マッチしない行を抜き出して表示します。
-
-w, --word-regexp
- マッチする部分が完全な単語を形成するときにのみ、その行を選択します。
次の条件を検査します。パターンにマッチする部分文字列は、行頭にあるか、
さもなければ、単語構成文字以外の文字の直後になければならない。
また、その部分文字列は、行末にあるか、さもなければ、単語構成文字以外の文字の
直前になければならない
(訳注:
ここで「完全な単語を形成する」というのは、
それが空白、改行、引用符、句読点などで前後を区切られた文字列だ
ということです。たとえば、文字列「A
word with you」中の word という
部分文字列は完全な単語ですが、文字列「two
words」中の部分文字列 word
は
完全な単語を形成しません)。
単語構成文字とは、アルファベット、数字、アンダスコアです
(訳注:
実は漢字や仮名も単語構成文字として扱われます)。
このオプションは、
-x
が同時に指定されたときには無効になります。
-
-x, --line-regexp
- パターンが行全体とぴったりマッチしたときにのみ、その行を選択します。
正規表現でいうと、これはパターンを括弧で囲み、前後に
^ と $
を付けるようなものです。
- -y
-
-i
と同じ意味を持つ旧式のオプションです。
-
-c, --count
- 通常の出力はせず、各入力ファイルについてマッチした行数を表示します。
-v, --invert-match オプション
(上記参照)
と共に指定した場合は、
マッチしなかった行数を表示します。
-
--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
オプションを同時に指定しない場合は、パターンにマッチする
文字列を含む行が存在するファイルの名前を列挙するということです)。
個々のファイルに対する走査は、最初のマッチで終了します。
-
-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
オプションも参照してください。
-
-s, --no-messages
- ファイルが存在しないことや読み込みめないことを示す
エラーメッセージを抑止します。
-
-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
から始まる行番号を表示します。
-
-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
だと見なします。
テキストではないバイトが見つかれば、バイナリデータです。
テキストではないバイトが、
現在使用しているロケールに不適切にエンコードして出力されたバイトや、
-z
オプションが指定されていないときの入力中のヌルバイトだということもあります。
- デフォルトでは
TYPE は binary であり、
grep
はファイルがバイナリだとわかると、
その先の出力を抑制します。そのかわりにバイナリファイルにマッチしたという
1
行のメッセージを表示します。マッチする部分がない場合には何も表示しません。
-
TYPE が without-match
の場合、 grep
はファイルがバイナリだとわかると、残りはマッチしないものと仮定します。
これは -I
オプションと等価です。
-
TYPE が text
の場合、 grep
はバイナリファイルをテキストであるかのように扱います。
これは -a
オプションと等価です。
-
type が binary
の場合、 grep は -z
がなくてもテキスト以外の文字を行の区切りとして扱う場合があります。
これは、 binary
を選ぶか text
を選ぶかによって、
パターンがファイルにマッチするかどうかに影響があることを意味します。
たとえば、 type が
binary の場合は q$
というパターンが q
の直後に NULL
文字が続く箇所にマッチする可能性があるのに対し、
type が text
の場合にはマッチしません。
逆に、 type が binary
の場合、 . (period)
というパターンは NULL
文字にはマッチしないかもしれません。
-
警告: -a
オプションはバイナリのゴミを出力するかもしれません。
出力先が端末であり、しかも
端末ドライバがゴミの一部をコマンドだと解釈する場合には、
このゴミが厄介な副作用を起こす可能性があります。
一方、テキストのエンコーディングが不明なファイルを読み込むとき、
マッチした結果をそのまま表示するのが安全でなくても、
より多くのマッチを探すために、
-a
を指定するか、環境変数で
LC_ALL='C'
を指定するのが役に立つ場合があります。
-
-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=GLOB
- コマンドラインで指定されているディレクトリのうち、
名前の尾部がパターン
GLOB
にマッチするディレクトリをスキップします。
また、ディレクトリを再帰検索しているときに出会うサブディレクトリについては、
ベースネームが GLOB
にマッチするサブディレクトリをスキップします。
GLOB
末尾の余分なスラッシュは無視されます。
- -I
- バイナリファイルをマッチするデータを含んでいないものとして
処理します。これは
--binary-files=without-match
オプションと等価です。
-
--include=GLOB
- ベースネームが
GLOB
にマッチするファイルのみを検索します
(--exclude
の項で説明したワイルドカードのマッチングを使用します)。
-
-r, --recursive
- 各ディレクトリの下にあるすべてのファイルを再帰的に読み込みます。
ただし、シンボリックリンクはコマンドラインで指定されたときにのみたどります。
検索対象のファイルが指定されなかった場合には
grep
は現在のディレクトリを探すことに注意してください。
これは -d recurse
オプションと等価です。
-
-R, --dereference-recursive
- 各ディレクトリの下にあるすべてのファイルを再帰的に読み込みます。
-r
と異なり、すべてのシンボリックリンクを追跡します。
- --line-buffered
- 行ごとに出力を行います。
実行速度が落ちるかもしれません。
-
-U, --binary
- ファイルをバイナリとして扱います。
MS-DOS や MS-Windows
の環境下で、 grep
はデフォルトでは、
ファイルがテキストかバイナリかを
--binary-files
オプションで記述された方法で推測します。
grep
はファイルをテキストファイルと判断した場合、オリジナルのファイル内容から
(^ や $
を使った正規表現が正しく動作するように)
CR
文字を取り除きます。
-U
を指定すると、この推測を抑制し、すべてのファイルを読み取って、
そのまま手を加えずにマッチ処理へ渡すのです。もしファイルが
各行の末尾に CR/LF
の組み合わせを持つテキストファイルなら、
このオプションのせいで正規表現がうまく働かないことがあるかもしれません。
このオプションは MS-DOS
や MS-Windows
以外のプラットフォームでは
効果がありません。
-
-z, --null-data
- 入力と出力のデータを、
改行のかわりに、
値が 0 のバイト (ASCII NULL
文字)
で区切られた一連の行として扱います。
-Z や --null
と同様、このオプションは
sort -z
などのコマンドと組み合わせて、
行儀の悪いファイル名の処理に使用することができます。
正規表現とは、一群の文字列を一まとめにして表現するパターンのことです。
正規表現の構成方法は、数式によく似ています。すなわち、さまざまな演算子を
使い、小さな表現を組み合わせて構成するのです。
grep
は、「基本」正規表現
(BRE)、「拡張」正規表現
(ERE)、「Perl の」正規表現
(PCRE) という 3
種類の正規表現文法を扱うことができます。
GNU
grep
では、「基本」と「拡張」の文法の間で、利用できる機能に違いはありません。
他の実装では、基本正規表現は拡張正規表現ほど強力ではないものです。
ここでは、拡張正規表現について説明し、
基本正規表現との相違については、後で簡単にまとめることにします。
なお、Perl
互換の正規表現にはより多くの機能があり、
pcresyntax(3) や
pcrepattern(3)
で詳細に解説されていますが、
PCRE
が用意されているシステムでしか利用できません。
正規表現を構成する基本単位は、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:]] は
現在のロケールの文字クラスで数字と文字を意味します。
C ロケールや ASCII
文字集合のエンコーディングの場合、
これは
[0-9A-Za-z]
と同じです。
(こうしたクラス名に使用されている角括弧は、シンボル名の一部なので、
角括弧式の前後に付く角括弧とは別に指定する必要があることに
注意してください。)
角括弧式の内側では、ほとんどのメタ文字がその特別な意味を
持たなくなります。
]
という記号そのものを角括弧式に含めるには、
それをリストの先頭に置いてください。
同様に、
^
という記号そのものを含めるには、
それを先頭以外のどこかに置けばよいでしょう。
最後に、
-
そのものを含めるには、
それをリストの最後に置きます。
キャレット
^ と
ドル記号
$
は、それぞれ行頭と行末の空文字列にマッチするメタ文字です。
シンボル
\<
とシンボル
\>
は、それぞれ単語の先頭と末尾の空文字列にマッチするメタ文字です。
シンボル
\b
は単語の端の空文字列にマッチします。
シンボル
\B
は単語の端
以外
の空文字列にマッチします。
シンボル
\w は
[_[:alnum:]]
と同じ意味で、
シンボル
\W は
[^_[:alnum:]]
と同じ意味です。
正規表現の後には、繰り返し演算子のどれかが続くことがあります。
- ?
- 直前の項目があってもなくてもよく、マッチするとしても
1
回だけということ。
- *
- 直前の項目が 0
回以上マッチするということ。
- +
- 直前の項目が 1
回以上マッチするということ。
-
{n}
- 直前の項目がちょうど
n
回マッチするということ。
-
{n,}
- 直前の項目が n
回以上マッチするということ。
-
{,m}
- 直前の項目が m
回以下マッチするということ。
これは GNU 拡張です。
-
{n,m}
- 直前の項目が n
回以上 m
回以下マッチするということ。
2
つの正規表現は結合することができます。
結果としてできあがる正規表現は、
結合対象となる部分表現にそれぞれマッチする
2
つの部分文字列を結合して作られる、どんな文字列にもマッチします。
2
つの正規表現は中置き型演算子の
|
で繋ぐことができます。
結果としてできあがる正規表現は、
どちらかの部分表現にマッチするどんな文字列にもマッチします。
繰り返しは結合に優先します。また結合は選択に優先します。
表現の 1
つのまとまりを括弧でくくると、その内側の式をこうした優先規則より
さらに優先させることができます。
括弧でくくった部分は、1
つの部分表現になるのです。
n が 1
個の数字であるような
後方参照
\n
は、正規表現中の括弧で囲まれた
n
番目の部分表現が前もってマッチした文字列とマッチします。
基本正規表現では、メタ文字
?,
+,
{,
|,
(,
)
は、その特殊な意味を失います。バックスラッシュを付けた
\?,
\+,
\{,
\|,
\(,
\)
を代わりに使用してください。
grep の動作は、
以下に挙げる環境変数の影響を受けます。
LC_foo
カテゴリのロケールは、
LC_ALL,
LC_foo,
LANG という 3
つの環境変数をこの順番で調べることで決まります。
この 3
つの環境変数のうち、設定されている最初のものが、
LC_foo
のロケールを決めるのです。
たとえば、
LC_ALL
が設定されていず、
LC_MESSAGES が
pt_BR
に設定されているとしましょう。
そのときは、ブラジルのポルトガル語というロケールが
LC_MESSAGES
カテゴリに使用されるわけです。
こうした環境変数がまったく設定されていなかったり、ロケールの
カタログがインストールされていなかったり、
grep が各国語サポート
(NLS)
を有効にしてコンパイルされていなかったり
した場合は、C
ロケールが使用されます。
シェルの
locale -a
コマンドによって現在利用できるロケールが一覧できます。
- GREP_OPTIONS
- この変数ではデフォルトのオプションを指定します。そうしたオプションは
コマンドラインで明示的に指定するオプションの前に置かれます。
これが移植性の高いスクリプトを書くときに問題となるため、
この機能は grep
の将来のリリースで削除されることになっており、
使用すると grep
が警告を表示します。
かわりにエイリアスやスクリプトを使ってください。
- 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) に当たるのは
どの文字とどの文字か、といったことを決めるものです。
このカテゴリーは、文字のエンコーディングも決定します。
つまり、テキストのエンコーディングが
UTF-8 か、ASCII か、
それ以外のエンコーディングかということです。
ロケールが C か POSIX
の場合は、
すべての文字が 1
バイトとしてエンコードされ、
すべてのバイトが有効な文字となります。
-
LC_ALL, LC_MESSAGES, LANG
- こうした変数は
LC_MESSAGES
カテゴリのロケールを指定します。
LC_MESSAGES は grep
がメッセージに使う言語を決めるものです。
デフォルトの C
ロケールでは、アメリカ英語のメッセージが使用されます。
- POSIXLY_CORRECT
- これが設定されていると、
grep は POSIX
が要求するとおりの動作をします。
設定されていない場合の動作は、ほかの
GNU のプログラムに
より近いものです。
POSIX
の規定では、ファイル名の後にオプションが現れた場合、
それをファイル名として扱わなければならないことになっています。
これに対して、 grep
のデフォルトでは、そうしたオプションを引き数リストの前の方に移動して、
オプションとして扱います。
また、POSIX
の規定では、理解できないオプションは
“illegal” (違法)
と判断するようになっていますが、
そうしたオプションも法律に違反しているわけではないので、
grep
のデフォルトでは、“invalid”
(無効)
という判断を下します。
通常では、選択される行が見つかったときの終了ステータスは
0 であり、
見つからなかったときは
1
であり、エラーが起きた場合は
2 です。 ただし、
-q ,
--quiet , --silent
といったオプションが使われていて、選択される行が見つかったときは、
エラーが起きたときでも終了ステータスは
0 です。
Copyright 1998-2000, 2002, 2005-2016 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.
バグ報告は 宛に E
メールで送ってください。
と
も用意されています。
{n,m}
を使って何度も繰り返しを行うと、
grep
は大量のメモリを消費するかもしれません。
また、ほかの曖昧な正規表現にも、指数関数的な時間と
メモリ空間を要するものがあり、
grep
がメモリ不足を起こすことがあります。
後方参照は非常に遅く、とんでもなく時間がかかることがあります。
awk(1),
cmp(1),
diff(1),
find(1),
gzip(1),
perl(1),
sed(1),
sort(1),
xargs(1),
zgrep(1),
read(2),
pcre(3),
pcresyntax(3),
pcrepattern(3),
terminfo(5),
glob(7),
regex(7).
grep(1p).
が用意されています。
info と
grep
プログラムが御使用のサイトにきちんとインストールされているならば、
- info grep
とコマンドを打ち込むことで、完備したマニュアルが読めるはずです。
このマニュアルは断続的にメンテナンスされるため、
完全版の文書のほうが最新であることがよくあります。
この翻訳は、FreeBSD jpman Project
<
http://www.jp.freebsd.org/man-jp/> から Linux JM project
に寄贈していただいたマニュアルを元にし、
GNU grep
の新しいマニュアルに合わせて、増補・改訂しています。
この場を借りて、FreeBSD jpman
Project
の翻訳者の方々にお礼を申し上げます。