grep
; description of options.
grep
.
grep
programs.
grep
commands
and command-line options.
grep
は,与えられたパターンリストに一致するものを含む行を,入力
ファイルで検索します.行の中に一致しているものが見つかるとき,(デフォル
トで)標準出力,または,オプションで要求したあらゆる他の出力にコピーしま
す.
grep
は,テキストでの一致を期待しますが,利用可能なメモリ以外に
入力行の長さの制限はなく,行の任意の文字に一致可能です.入力ファイルの最
後のバイトが改行では無い場合,grep
は暗黙にそれを付加します.改
行は,パターンリストのセパレータでもあるので,テキストの改行文字に一致す
る方法はありません。
grep
の呼び出しgrep
は,POSIX.2とGNUの拡張の,豊富なオプションセット
を持っています.
-c
--count
-v
,--revert-match
オプションと併用した
場合,一致しない行を数えます.
-e pattern
--regexp=pattern
-
で始まるパターンの保護に
役立ちます.
-f file
--file=file
-i
--ignore-case
-l
--files-with-matches
-n
--line-number
-q
--quiet
--silent
-s
や--no-messages
オプションも参
照してください.
-s
--no-messages
grep
は,-q
オプショ
ンが無く,-s
オプションは,GNU grep
の-q
オプ
ションのように動作するので,伝統的なgrep
は,GNU
grep
と異なり,POSIX.2準拠ではありません.伝統的な
grep
との移植性を考慮するシェルスクリプトは,-q
と
-s
を避け,代わりに/dev/null
に,出力をリダイレクトするべき
です.
-v
--invert-match
-x
--line-regexp
-A num
--after-context=num
-B num
--before-context=num
-C num
--context=[num]
-num
--context=num
と同様に,前後の行を出力します.しかし,
grep
は,与えられた行を,一度以上出力しません.
-V
--version
grep
のバージョンナンバーを標準出力に出力します.このバージョン
ナンバーをすべてのバグレポートに含めてください.
--help
--binary-files=type
binary
で,grep
は通常,バイナリファイルが一
致したことを告げる1行のメッセージの出力する,または,一致しない場合はな
にもメッセージを出力しないのどちらかです.typeが
without-match
の場合,grep
はバイナリファイルは一致しない
と考えます.これは-I
オプションと同じです.typeがtext
の場合,grep
はバイナリファイルをテキストであるかのように処理し
ます.これは-a
オプションと同じです.警告:
--binary-files=text
は,端末に出力されるバイナリのゴミを出力する可
能性があり,出力が端末で,且つ端末ドライバがそれをコマンドとして解釈した
場合,それは厄介な副作用となるはずです.
-b
--byte-offset
grep
を実行するときは,
-u
(--unix-byte-offsets
)オプションが使われているかどうかに
依存して,バイトオフセットを出力します.以下を参照してください.
-d action
--directories=action
read
で,それは,ディレクトリが
普通のファイルであるかのように読まれることを意味します(オペレーティング
システムとファイルシステムによってはこれができないものもあり,
grep
は全てのディレクトリに対しエラーメッセージを出力します).
actionがskip
の場合,ディレクトリは暗黙にスキップされます.
actionがrecurse
の場合,grep
はそれぞれのディレクト
リ下の全てのファイルを再帰的に読み込みます.これは,-r
オプション
と同じです.
-H
--with-filename
-h
--no-filename
-L
--files-without-match
-a
--text
--binary-files=text
オプションと同じです.
-I
--binary-files=without-match
オプションと同じです.
-w
--word-regexp
-r
--recursive
-d recurse
オプションと
同じです.
-y
-i
に対する時代遅れの同義語です.
-U
--binary
grep
は,ファイルから読み込んだ最初の32kBの内容を見てファ
イル形式を推測します.grep
が,ファイルをテキストファイルだと決
定した場合,元ファイルの内容からCR
文字を取ります(^
と
$
を使った正規表現が正確に働くためです).-U
で指定してこの推
測を覆す場合,全てのファイルは読み込まれ,逐語的に一致検索する方式に渡さ
れ,ファイルのそれぞれの行の終りがCR/LF
の組のテキストファイルの場
合,失敗する正規表現も出てきます.このオプションは,MS-DOSと
MS-Windowsのみでサポートされています.
-u
--unix-byte-offsets
grep
は,ファイル
があたかもUnixスタイルのファイルであるかのように,バイトオフセットを報告
するよう切替えます.すなわち,バイトオフセットは,取り除かれたCR
文字を無視します.これは,Unixマシンでgrep
を実行するのと同じ結
果を生成します.このオプションは,-b
オプションと一緒に使用しない
限り効果がありません.MS-DOSとMS-Windows以外のプラットホームでは効
果がありません.
--mmap
read
システムコールの代わり
に,mmap
システムコールを使用します.--mmap
が,良いパフォー
マンスを与える場合もあります.しかし,grep
処理中に入力ファイル
が小さくなる場合や,I/Oエラーが生じた場合,--mmap
は,(coreの吐き
出しを含め)未定義の動作をすることもあります.
-Z
--null
NUL
文字)
を出力します.例えば,grep -lZ
は,それぞれのファイル名の後,通常
の改行の代わりに,0バイトを出力します.このオプションは,ファイル名が改
行のような普通でない文字を含む場合でも出力を曖昧にしません.このオプショ
ンは,改行文字を含むような任意のファイル名を処理するとき使用する,
find -print0
,perl -0
,sort -z
とxargs -0
のよ
うなコマンドとともに使用されます.
-z
--null-data
NUL
文字)で終端
され,入力を1行として扱います.-Z
や--null
オプションのよう
に,このオプションは,任意のファイル名を処理する際のsort -z
のよう
なコマンドとともに使用されます.
grep
一致エンジンの変形を使用するかどうかを制御する,追加のオ
プションもあります.See Grep Programs.
grep
の動作は,以下の環境変数に影響されます.
GREP_OPTIONS
GREP_OPTIONS
が
--binary-files=without-match --directories=skip
の場合,
grep
は,2つのオプション--binary-files=without-match
と
--directories=skip
が,明確なオプションの前に指定されているように
動作します.オプション指定は,空白で分割します.バックスラッシュは次の文
字をエスケープするので,空白やバックスラッシュを含むオプションを指定する
とき使用することができます.
LC_ALL
LC_MESSAGES
LANG
LC_MESSAGES
ロケールを指定し,それは,grep
がメッセージで使用する言語を決定します.ロケールは,設定されたこれらの変
数で最初に決定されます.これらの環境変数が設定されていない場合や,メッセー
ジカタログがインストールされていない場合や,grep
が国際言語サポー
ト(NLS)でコンパイルされていない場合,アメリカ英語が使用されます.
LC_ALL
LC_CTYPE
LANG
LC_CTYPE
ロケールを指定し,それは例えば,どの文字が
空白となるかといった,文字の型を決定します.ロケールは,設定されたこれら
の変数で最初に決定されます.これらの環境変数が設定されていない場合や,ロ
ケールカタログがインストールされていない場合や,grep
が国際言語
サポート(NLS)でコンパイルされていない場合,POSIXロケールが使用
されます.
POSIXLY_CORRECT
grep
は,POSIX.2で要求されているように
動作します.そうでない場合,grep
は,他のGNUプログラムのよ
うに動作します.POSIX.2は,ファイル名が続くオプションは,ファイル名
として扱う必要があると要求します.デフォルトで,そのようなオプションは,
オペランドリストの前に順序を変え,オプションとして扱われます.また,
POSIX.2は,理解できなかったオプションを「不正」と診断することも要求
しますが,本当に規則に反しているわけではないので,デフォルトでは「無効」
と診断されます.POSIXLY_CORRECT
は,以下で述べる
_N_GNU_nonoption_argv_flags_
も使用できないようにします.
_N_GNU_nonoption_argv_flags_
N
は,grep
のプロセスID番号です.)この環境
変数の値のi番目の文字が1
の場合,grep
のi番目
のオペランドは,明らかにそうであってもオプションと考えません.シェルは,
実行するそれぞれのコマンドに対し,この変数を環境に置くことができ,それを
指定すると,オペランドはワイルドカードを展開したファイル名の結果となり,
そのため,オプションとして扱われません.この動作は,GNUCライブラリ
のみで,POSIXLY_CORRECT
がセットされていないときのみ利用可能です.
通常,一致したものが見つかった場合,終了ステータスは0で,一致したものが
見つからない場合,1です(-v
オプションは,終了ステータスの意味が反
転します).パターン内の構文エラーや,アクセスできない入力ファイルや,他
のシステムエラーがある場合,終了ステータスは2です.
grep
プログラムgrep
は,指名された入力ファイル(または,ファイルが指名されない
場合や,-
という名前のファイルが与えられた場合は標準入力)で,与え
られたパターンに一致したものを含む行を探します.デフォルトで,
grep
は一致した行を出力します.3つの主要なgrep
の変形
があり,以下のオプションで制御されます.
-G
--basic-regexp
-E
--extended-regexp
-F
--fixed-strings
さらに,2つの変形プログラム,egrep
とfgrep
が利用可能
です. egrep
は,grep -E
と同じです.fgrep
は,
grep -F
と同じです.
正規表現は,文字列のセットを記述するパターンです.正規表現は,より
小さな表現を統合する,様々なオペレータを使った算数的な表現で,同様に組み
立てられます.grep
は,2つの異なるバージョンの正規表現構文,"
基本"と"拡張"を理解します.GNU grep
では,どちらの構文
を使っても,利用可能な機能に違いはありません.他のインプリメンテーション
では,基本正規表現はそんなに強力ではありません.以下の記述は,拡張正規表
現に当てはまります.基本正規表現との違いは,後で要約します.
基本的な構築ブロックは,一文字に一致する正規表現です.すべての文字と数字
を含むほとんどの文字は,自分自身に一致する正規表現です.特殊な意味を持つ
あらゆるメタ文字は,バックスラッシュを前に置くことで引用可能です.
[
と]
で囲まれた文字のリストは,リストのあらゆる一文字と一致
します.リストの最初の文字がキャレット^
の場合,リストに
ないあらゆる文字に一致します.例えば,正規表現
[0123456789]
は,あらゆる数字に一致します.文字の範囲は,ハイフン
で分けられた,最初と最後の文字を与えることで指定できます.
終りに,文字の命名されたクラスは,以下のように前もって定義されています.
その解釈はLC_CTYPE
ロケールに依存します.以下の解釈はPOSIX ロ
ケールのもので,LC_CTYPE
ロケールがない場合,デフォルトとなります.
[:alnum:]
[:alpha:]
と[:digit:]
.
[:alpha:]
[:lower:]
と[:upper:]
.
[:blank:]
[:cntrl:]
DEL
)です.その他の文字セットでは,それが何であれ,
文字と同じです.
[:digit:]
0 1 2 3 4 5 6 7 8 9
.
[:graph:]
[:alnum:]
と[:punct:]
.
[:lower:]
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
.
[:print:]
[:alnum:]
,[:punct:]
,そしてスペース.
[:punct:]
! " # $ % & ' ( ) * + , - . / : ; < = > ? @ [ \
] ^ _ ` { | } ~
.
[:space:]
[:upper:]
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
.
[:xdigit:]
0 1 2 3 4 5 6 7 8 9 A B C D E F a b c d e f
.
[[:alnum:]]
は[0-9A-Za-z]
を意味しますが,後者の書式
は,POSIXロケールとASCII文字の符号化に依存し,前者はロケールと
文字セットに依存しません.(これらのクラス名のカッコはジンボル名の一部で,
追加時には,カッコのリストを範囲を定めるカッコを含める必要があることに注
意してください).ほとんどのメタ文字は,リスト内で特殊な意味を失います.
リテラル]
を含めるため,それをリストの最初に置いてください.同様に,
リテラル^
を含めるため,最初以外の場所に置いてください.終りに,リ
テラル-
を含めるため,最後に置いてください.
ピリオド.
はあらゆる一文字に一致します.シンボル\w
は
[[:alnum:]]
の同義語で,\W
は[^[:alnum]]
の同義語です.
キャレット^
と ドル記号$
は,それぞれ,行の最初と最後の空の
文字列に一致するメタ文字です.シンボル\<
と\>
は,それぞれ,
単語の最初と最後の空の文字列に一致します.\b
は,単語の端の空の文
字列に一致し,\B
は,単語の端ではない,空の文字列に一致します.
正規表現は,繰り返しオペレーターの1つを続けることができます.
?
*
+
{n}
{n,}
{n,m}
2つの正規表現は連結できます.その結果の正規表現は,それぞれ連結されたサ ブ表現に一致する,2つのサブ文字列を連結した形式の,あらゆる文字列に一致 します.
2つの正規表現は,インフィクスオペレータ|
で連結することができます.
その結果の正規表現は,サブ表現のどちらかに一致する,あらゆる文字列に一致
します.
繰り返しは連結に優先し,それは交互に優先されます.これらの優先規則に優 先させるため,サブ表現全体を丸カッコで囲むことができます.
前方参照\n
は,nが一桁の場合,丸カッコで囲われている正
規表現のサブ表現を,前でn番目に一致した,サブ文字列に一致します
2.
基本的な正規表現で,メタ文字?
,+
,{
, |
,
(
と,)
は,特別な意味を失います.代わりに,バックスラッシュ
バージョンの\?
,\+
,\{
, \|
,\(
と,
\)
を使ってください.
伝統的なegrep
は,メタ文字{
をサポートしておらず,
\{
をサポートするegrep
のインプリメントもあります.その
ため,移植可能なスクリプトでは,egrep
のパターンで{
を避け,
リテラル{
に一致する[{]
を使うべきです.
GNU egrep
は,無効な間隔の指定で始まる場合,{
は特
別でないものとして,伝統的な使用のサポートを試みます.例えば,シェルコマ
ンドegrep '{1'
は,正規表現の構文エラーを報告する代わりに,2文字
の文字列{1
を検索します.POSIX.2は,拡張としてのこの動作を許
可しますが,移植可能なスクリプトでは避けるべきです.
ここに,GNU grep
を呼び出す,シェルコマンドの例があります.
grep -i 'hello.*world' menu.h main.c
これは,menu.h
とmain.c
で,文字列world
が続く文字列
hello
を含む,全ての行をリストアップします.これは,.*
が,
行の0以上の文字に一致するためです.See Regular Expressions.
-i
オプションは,grep
に大文字小文字を無視させ,
Hello, world!
に一致させます.そうしなければ一致しません.
grep
の呼び出し方の詳細は,See Invoking.
ここに,grep
の使用法に関する,共通の質問と回答があります.
grep -l 'main' *.c
カレントディレクトリで,内容にmain
があるCファイルの名前をリストアッ
プします.
grep -r 'hello' /home/gigi
hello
を,ディレクトリ/home/gigi
の下の,全てのファイルで検
索します.検索ファイルをもっと制御するために,find
,
grep
と,xargs
を使ってください.例えば,以下のコマン
ドはCファイルのみを検索します.
find /home/gigi -name '*.c' -print | xargs grep 'hello' /dev/null
-
で始まる場合,どうすれば良いのでしょうか?
grep -e '--cut here--' *
--cut here--
に一致する全ての行を検索します.-e
がない場合,
grep
は,--cut here--
をオプションのリストとして,分割し
ようとします.
grep -w 'hello' *
単語全体でhello
となるもののみを検索します.Othello
には一致
しません.より制御するため,単語の最初と最後に一致する,\<
と
\>
を使ってください.例えば,以下のようにします.
grep 'hello\>' *
hello
で終る単語のみを検索するので,単語Othello
に一致します.
grep -C 2 'hello' *
一致した行の周りの文を,それぞれ2行出力します.
grep
で強制的にファイル名を出力するにはどうしたら良いのでしょう
か?
/dev/null
を加えてください.
grep 'eli' /etc/passwd /dev/null
ps
出力で,奇妙な正規表現をなぜ使うのですか?
ps -ef | grep '[c]ron'
パターンが角カッコなしで書かれている場合,ps
出力行の
cron
だけでなく,ps
出力のgrep
にも一致します.
grep
は「バイナリファイルの一致」をなぜ報告するのですか?
grep
が,バイナリファイルから全ての一致行をリストアッ
プした場合,生成された出力はおそらく役に立たず,ディスプレイにゴミを撒き
散らすでしょう.そのため,GNU grep
は,明らかなバイナリファ
イルからの出力は抑制します.明らかなバイナリファイルからも,GNU
grep
の出力を強制させるため,-a
や
--binary-files=text
オプションを使用してください."Binary file
matches"メッセージをエミュレートするため,-I
や
--binary-files=without-match
オプションを使用してください.
grep -lv
は,なぜ一致しないファイル名を出力しないのですか?
grep -lv
は,1つ以上一致していない行を含む,全てのファイル名をリス
トアップします.一致行がない全てのファイル名をリストアップするために,
-L
や--files-without-match
オプションを使ってください.
|
でできますが,ANDはどうするのですか?
grep 'paul' /etc/motd | grep 'franc,ois'
paul
とfranc,ois
の両方を含む全ての行を検索します.
ファイル名-
の指定を使用してください.
cat /etc/passwd | grep 'alain' - /etc/motd
バグの報告は,bug-gnu-utils@gnu.orgに電子メールを送ってください. "Subject:"フィールドのどこかに,単語"grep"があることを確かめてくださ い.
{m,n}
の大きな繰り返し回数で,grep
が多くのメモリを使う
可能性があります.さらに,特定のその他の曖昧な正規表現は,指数関数的な時
間と空間を要求し,grep
の実行はメモリ不足になる可能性があります.
前方参照は大変遅く,指数関数的な時間を必要とする可能性があります.
これは,grep
コマンドとコマンドラインオプション以外の,このマニュ
アルで述べられている,全ての問題の,一般的な索引です.
grep
usage: Usage
grep
, Q&A: Usage
これは,全てのgrep
コマンド,コマンドラインオプションと,環境変
数の,アルファベット順のリストです.
*
: Regular Expressions
+
: Regular Expressions
--after-context
: Invoking
--basic-regexp
: Grep Programs
--before-context
: Invoking
--binary
: Invoking
--binary-files
: Invoking
--byte-offset
: Invoking
--context
: Invoking
--directories
: Invoking
--extended-regexp
: Grep Programs
--file
: Invoking
--files-with-matches
: Invoking
--files-without-match
: Invoking
--fixed-strings
: Grep Programs
--help
: Invoking
--ignore-case
: Invoking
--invert-match
: Invoking
--line-number
: Invoking
--line-regexp
: Invoking
--mmap
: Invoking
--no-filename
: Invoking
--no-messages
: Invoking
--null
: Invoking
--null-data
: Invoking
--quiet
: Invoking
--recursive
: Invoking
--regexp=pattern
: Invoking
--silent
: Invoking
--text
: Invoking
--unix-byte-offsets
: Invoking
--version
: Invoking
--With-filename
: Invoking
--word-regexp
: Invoking
-a
: Invoking
-A
: Invoking
-b
: Invoking
-B
: Invoking
-C
: Invoking
-c
: Invoking
-count
: Invoking
-d
: Invoking
-E
: Grep Programs
-e
: Invoking
-F
: Grep Programs
-f
: Invoking
-G
: Grep Programs
-h
: Invoking
-H
: Invoking
-i
: Invoking
-L
: Invoking
-l
: Invoking
-n
: Invoking
-NUM
: Invoking
-q
: Invoking
-r
: Invoking
-s
: Invoking
-u
: Invoking
-U
: Invoking
-V
: Invoking
-v
: Invoking
-w
: Invoking
-x
: Invoking
-y
: Invoking
-z
: Invoking
-Z
: Invoking
?
: Regular Expressions
_N_GNU_nonoption_argv_flags_
: Invoking
alnum
: Regular Expressions
alpha
: Regular Expressions
blank
: Regular Expressions
cntrl
: Regular Expressions
digit
: Regular Expressions
graph
: Regular Expressions
GREP_OPTIONS
: Invoking
LANG
: Invoking
LC_ALL
: Invoking
LC_CTYPE
: Invoking
LC_MESSAGES
: Invoking
lower
: Regular Expressions
POSIXLY_CORRECT
: Invoking
print
: Regular Expressions
punct
: Regular Expressions
space
: Regular Expressions
upper
: Regular Expressions
xdigit
: Regular Expressions
{n,m}
: Regular Expressions
{n,}
: Regular Expressions
{n}
: Regular Expressions
訳注:一致する行を含まないファイルという意味.
訳注:JMでの例は,「`su(momo)mo\1mo\1nouti'は, `sumomomomomomomomonouti'に一致します」となっています