このページの内容

2.1.3 一般的な出力の制御

-c
--count

通常の出力を抑制し、代わりに各入力ファイルの一致行数を表示します。-v(--invert-match)オプションを指定した場合は、一致しない行を数えます。(-cはPOSIXで定められています。)

--color[=WHEN]
--colour[=WHEN]

一致した空でない文字列、一致行、文脈行、ファイル名、行番号、バイトオフセット、区切り(フィールド間および文脈行のグループ間)をエスケープシーケンスで囲み、端末上で色を付けて表示します。色は環境変数GREP_COLORSで定義します。既定値は「ms=01;31:mc=01;31:sl=:cx=:fn=35:ln=32:bn=32:se=36」で、一致したテキストは太字の赤、ファイル名はマゼンタ、行番号とバイトオフセットは緑、区切りはシアン、それ以外は端末の既定色になります。「環境変数」を参照してください。

WHENには、色を使う場合は「always」、使わない場合は「never」を指定します。「auto」の場合は、標準出力が端末デバイスに接続され、環境変数TERMの値からその端末が色表示に対応すると判断できるときに色を使います。引数なしの--colorは--color=autoとして扱われます。--colorオプションを指定しない場合の既定値は--color=neverです。

-L
--files-without-match

通常の出力を抑制し、代わりに、通常なら何も出力されなかった各入力ファイルの名前を表示します。

-l
--files-with-matches

通常の出力を抑制し、代わりに、通常なら出力が生じた各入力ファイルの名前を表示します。各入力ファイルの走査は、最初の一致が見つかった時点で停止します。(-lはPOSIXで定められています。)

-m num
--max-count=num

最初のnum行を選択した後で停止します。numが0の場合、grepは入力を読まずに直ちに停止します。numが−1の場合は無限大として扱い、grepは停止しません。これが既定の動作です。

入力が通常ファイルからの標準入力であり、選択されたnum行を出力した場合、grepは、後続の文脈行の有無にかかわらず、終了する前に標準入力の位置を最後の選択行の直後に合わせます。これにより、呼び出し元のプロセスは検索を再開できます。たとえば、次のシェルスクリプトはこの動作を利用しています。

while grep -m 1 'PATTERN'
do
  echo xxxx
done < FILE

ただし、パイプは通常ファイルではないため、次の例はおそらく動作しません。

# これはおそらく動作しません。
cat FILE |
while grep -m 1 'PATTERN'
do
  echo xxxx
done

grepは、num行を選択して停止するとき、指定された後続の文脈行も出力します。-cまたは--countオプションも使う場合、grepはnumを超える行数を出力しません。-vまたは--invert-matchオプションも使う場合、grepは一致しないnum行を出力してから停止します。

-o
--only-matching

一致行のうち、一致した空でない部分だけを、各部分につき1行で表示します。出力行の区切りは入力と同じです。-z(--null-data)も指定した場合、区切りはNULバイトになります(「その他のオプション」を参照)。

-q
--quiet
--silent

静かに処理し、標準出力へ何も書きません。一致が見つかった場合は、エラーが検出されていても、直ちに終了状態0で終了します。-sまたは--no-messagesオプションも参照してください。移植性についての注意:Solaris 10のgrepには-qがありません。移植可能なシェルスクリプトでは通常、-qを使う代わりに標準出力を/dev/nullへリダイレクトできます。(-qはPOSIXで定められています。)

-s
--no-messages

存在しないファイルや読み取りできないファイルについてのエラーメッセージを抑制します。(-sはPOSIXで定められています。)