Linux egrepコマンド

更新しました。 03/13/2021 by Computer Hope

Unix 系 OS では、egrep コマンドはテキストパターンを検索し、拡張正規表現を使ってマッチングを実行します。 egrep の実行は、-E オプションを付けて grep を実行するのと同じです。

このページは GNU/Linux 版 egrep をカバーします。

構文

egrep PATTERN 

オプション

ファイルの最初の数バイトが、ファイルがバイナリデータを含むことを示す場合、ファイルのタイプは TYPE だと仮定する。 デフォルトでは、TYPE はバイナリであり、通常 grep はバイナリファイルにマッチするという 1 行のメッセージを出力するか、マッチしない場合は何もメッセージを出力しない。 TYPE が without-match の場合、grep はバイナリファイルがマッチしないものと見なします。 TYPE が text の場合、grep はバイナリファイルをテキストと同じように処理します。 警告: grep –binary-files=text はバイナリのゴミを出力するかもしれない。出力が端末であり、端末ドライバがその一部をコマンドとして解釈する場合、厄介な副作用が生じる可能性がある。 WHEN は ‘never’, ‘always’, ‘auto’

通常の出力をやめ、各入力ファイルに対してマッチした行数を表示する。 v, –invert-match オプション (下記参照) を使用すると、マッチしない行を数える。

NUM行マッチしたらファイルの読み込みを停止するようにしました。 入力が通常ファイルからの標準入力で、NUM個のマッチング行が出力される場合、grepは、最後のコンテキスト行の存在にかかわらず、標準入力が終了する前に最後のマッチング行の後に配置されることを保証する。 これにより、呼び出したプロセスが検索を再開することができます。 grep が NUM マッチ行の後で停止すると、後続のコンテキスト行がすべて出力されます。 c または –count オプションも使用すると、NUM より大きいカウントは出力されません。 v または –invert-match オプションも使用された場合、NUM 個のマッチしない行を出力した後に grep は停止する。

標準出力に何も書き込まないように静かにしてください。 エラーが検出された場合でも、一致するものがあれば直ちにゼロステータスで終了する。 s または –no-messages オプションも参照。

各ディレクトリ以下のすべてのファイルを再帰的に読み込む; これは -d recurse オプションと等価である。 Modified by:
–include=PATTERN
PATTERNにマッチするファイルのみを検索してディレクトリに戻る。
–exclude=PATTERN
PATTERNにマッチするファイルを飛ばしてディレクトリに戻る。

-A NUM,
–after-context=NUM
NUM 行分の末尾コンテキストをマッチした行の後に表示します。
-a, –text バイナリファイルをテキストのように処理します; これは –binary-files=text オプションと同じです。
-C NUM, –context=NUM 出力コンテキストをNUM行出力する。
-b, –byte-offset 出力の各行の前に入力ファイルのバイトオフセットを表示する。
–binary-files=TYPE
-c, –count
-D ACTION,
–devices=ACTION
入力ファイルがデバイス、FIFO、ソケットであれば、ACTION で処理を行う。 デフォルトでは、ACTIONはreadであり、デバイスは通常のファイルと同じように読み込まれます。
-d ACTION,
–directories=ACTION
入力ファイルがディレクトリの場合、ACTIONを使用して処理します。 デフォルトでは、ACTIONはreadであり、ディレクトリは通常のファイルと同じように読み込まれる。 ACTIONがskipの場合、ディレクトリは黙ってスキップされます。 ACTION が recurse の場合、各ディレクトリ以下の全てのファイルを再帰的に読み込む。これは -r オプションと同等である。
-e PATTERN,
–regexp=PATTERN
PATTERN をパターンとして使用。
-F, –fixed-strings PATTERNを改行で区切ってマッチさせる固定文字列のリストとして解釈する。
-P, –perl-regexp PATTERNをPerl正規表現として解釈する。
-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 通常の出力を抑止します; 代わりに、出力が通常印刷される各入力ファイルの名前を印刷します。
-m NUM,
–max-count=NUM
–mmap 可能ならば、デフォルトの read システムコールではなく mmap システムコールで入力を読み込んでください。 状況によっては、-mmap の方が良い性能を発揮する。 しかし、-mmap は grep の動作中に入力ファイルが縮小されたり、I/O エラーが発生した場合に (コアダンプを含む) 未定義の動作を引き起こす可能性がある。
-o, –only-matching マッチした行のうち PATTERN にマッチした部分のみを表示する。
–label=LABEL 実際に標準入力から来た入力を LABEL ファイルから来た入力として表示する。 これは zgrep のようなツールで特に有用で、例えば gzip -cd foo.gz |grep -H –label=foo 何か
–line-buffered ラインバッファを使用する。
-q, –quiet, –silent
-R, -r, –recursive
-s, –no-messages 存在しないファイルや読み取り不可能なファイルのメッセージは抑止されます。 移植性の注意: GNU grep とは異なり、従来の grep は POSIX.2 に準拠していませんでした。なぜなら従来の grep には -q オプションがなく、-s オプションは GNU grep の -q オプションと同じ挙動を示したからです。 従来の grep への移植を目的としたシェルスクリプトは、-q と -s の両方を避け、代わりに出力を /dev/null にリダイレクトすべきである。
-U, –binary ファイルをバイナリとして扱う。 MS-DOS および Microsoft Windows のデフォルトでは、grep はファイルから読み込まれた最初の 32 KB の内容を見て、ファイルタイプを推測する。 grep がファイルをテキストファイルと判断した場合、元のファイルの内容から CR 文字を除去します (^ および $ による正規表現が正しく機能するようにするため)。 U を指定すると、この推測が無効になり、すべてのファイルが読み込まれてマッチング機構にそのまま渡されます。ファイルがテキストファイルで各行の末尾に CR/LF ペアがある場合、一部の正規表現が失敗する原因になります。 このオプションは MS-DOS と MS-Windows 以外のプラットフォームでは効果がない。
-u, –unix-byte-offsets Report Unix-style byte offsets。 このスイッチは、ファイルが Unix スタイルのテキスト・ファイルであるかのように、すなわち CR 文字が取り除かれたものであるかのように、grep がバイト・オフセットを報告するようにする。 これにより、Unix マシン上で grep を実行したのと同じ結果が得られます。 このオプションは、-b オプションも使用しない限り効果がない。また、MS-DOS と MS-Windows 以外のプラットフォームでは効果がない。
-V, –version grep のバージョン番号を標準エラー出力に表示します。 このバージョン番号は、すべてのバグレポートに含まれるべきである(下記参照)。
-v, –invert-match マッチングの意味を反転し、マッチしない行を選択する。
-w, –word-regexp 単語全体を表すマッチを含む行のみを選択する。 テストは、マッチする部分文字列が行の先頭にあるか、単語でない構成文字が前にあることです。 同様に、その文字列は行末にあるか、単語以外の構成文字が続いていなければなりません。
-x, –line-regexp 行全体に完全に一致するものだけを選択します。
-y Obsolete synonym for -i.
-Z, –null 通常ファイル名の後に続く文字の代わりにゼロバイト (ASCII NULL 文字) を出力します。 例えば、grep -lZ は、各ファイル名の後に、通常の改行の代わりにゼロバイトを出力する。 このオプションは、改行のような通常とは異なる文字を含むファイル名がある場合でも、出力を曖昧にしないようにします。 このオプションは find -print0, perl -0, sort -z, xargs -0 といったコマンドと一緒に使うことで、改行文字を含むファイル名でも任意のファイル名を処理することができる。

正規表現

正規表現とは、一連の文字列を表現するパターンである。 正規表現は、より小さな式を組み合わせるためにさまざまな演算子を使用して、算術式と同様に構築されます。

Grep は正規表現の構文の 2 つの異なるバージョンを理解します。 “基本” と “拡張” です。 GNU grep では、どちらの構文も使用可能な機能に違いはありません。 他の実装では、基本的な正規表現はあまり強力ではありません。 以下の説明は、egrep で使用される拡張正規表現に適用されます。基本的な正規表現の違いは、その後にまとめています。

基本的な構成要素は、1 つの文字にマッチする正規表現です。 すべての文字と数字を含むほとんどの文字は、それ自身にマッチする正規表現である。 特別な意味を持つメタキャラクタは、その前にバックスラッシュを付けることで引用することができる。 リストの最初の文字がキャレット ^ である場合、 リストにない文字にマッチする。 例えば、この正規表現は任意の一桁の数字にマッチします。

ブラケット表現内では、範囲表現はハイフン (“-“) で区切られた二つの文字で構成されています。 これは、ロケールの照合順序と文字セットを使って、2 つの文字の間をソートする任意の 1 文字にマッチします。 たとえば、デフォルトのCロケールでは、.と等価である。 多くのロケールでは、文字は辞書順にソートされ、これらのロケールでは、しばしば と同等ではなく、例えば と同等である。 伝統的な括弧表現の解釈を得るには、環境変数LC_ALLにC.

を設定することでCロケールを使用できる。最後に、括弧表現には以下のように特定の名前のついたクラスの文字があらかじめ定義されている。 ただし、後者はCのロケールとASCII文字エンコーディングに依存するが、前者はロケールや文字セットに依存しない。 (これらのクラス名の括弧はシンボル名の一部であり、括弧リストを区切る括弧に加えて含まれなければならないことに注意してください)。 ほとんどのメタキャラクタはリストの中では特別な意味を失います。 リテラル ] を含めるには、リストの最初に置きます。 同様に、リテラル ^ を含めるには、最初以外の場所に置きます。 最後に、リテラル – を含めるには、最後に置きます。

ピリオド .は任意の一文字にマッチします。

キャレット ^ とドル記号 (“$”) はメタキャラクタであり、それぞれ行頭と行末にある空文字列にマッチします。 記号は、それぞれ単語の先頭と末尾の空文字列にマッチします。 記号 \b は単語の端にある空文字列にマッチし、単語の端でない場合は空文字列にマッチします。

正規表現の後には、いくつかの繰り返し演算子のうちの1つが続きます。

直前の項目はオプションで、最大1回マッチします。 * 直前の項目は0回以上マッチします。 + 直前の項目は1回以上マッチします。 {n}。 先行する項目がちょうどn回マッチする。 {n,} 先行する項目がn回以上マッチする。 {n,m} {n,m 先行する項目が少なくともn回、最大m回マッチします。

二つの正規表現を連結することができ、結果の正規表現は連結した部分式にそれぞれマッチする二つの部分式を連結してできる任意の文字列にマッチします。

二つの正規表現を infix 演算子 | で結合することができます; 結果として得られる正規表現は、いずれかの部分表現にマッチする任意の文字列にマッチします。

下位式全体を括弧で囲むと、これらの優先順位の規則を上書きすることができます。

後方参照 \n (n は1桁) は、正規表現のn番目の括弧付き下位式によって以前にマッチした部分文字列にマッチします。

従来の egrep は { メタキャラクタをサポートしておらず、いくつかの egrep 実装は代わりに \{ をサポートしています。したがって、移植スクリプトは egrep パターンで { を避け、リテラルの { にマッチするように使用する必要があります。 たとえば、シェルコマンドegrep ‘{1’は、正規表現の構文エラーを報告する代わりに、2文字の文字列{1}を検索します。 POSIX.2 は拡張機能としてこの動作を許可しているが、移植可能なスクリプトはこれを避けるべきである。

環境変数

Grep の動作は以下の環境変数によって影響を受ける:

A locale LC_foo は三つの環境変数 LC_ALL, LC_foo, LANG, この順に検査することによって特定される。 これらの変数のうち、最初に設定されたものがロケールを指定する。 例えば、LC_ALL が設定されておらず、LC_MESSAGES が pt_BR に設定されている場合、LC_MESSAGES ロケールにはブラジル・ポルトガル語が使用されます。 これらの環境変数が設定されていない場合、ロケールカタログがインストールされていない場合、または grep が各国語サポート (NLS) でコンパイルされていない場合、C ロケールが使用される。

GREP_OPTIONS

この変数は、任意の明示的オプションより前に置かれるデフォルトオプションを指定します。 例えば、GREP_OPTIONS が ‘–binary-files=without-match –directories=skip’ の場合、 grep は –binary-files=without-match と –directories=skip の二つのオプションが、明示的なオプションより前に指定されているかのようにふるまう。 オプションの指定は、空白で区切られます。 バックスラッシュは次の文字をエスケープするので,ホワイトスペースやバックスラッシュを含むオプションの指定に使用できる。

GREP_COLOR

強調表示するマーカーを指定する。

LC_ALL, LC_COLLATE, LANG

これらの変数は LC_COLLATE ロケールを指定し、 .

LC_ALL, LC_CTYPE, LANG

これらの変数は LC_CTYPE ロケールを指定し、文字のタイプ、例えば、.LC.LC.C.のように範囲式を解釈するために用いられる照合順序を決定する。

LC_ALL, LC_MESSAGES, LANG

These variables specify the LC_MESSAGES locale, which determines the language that grep used for messages.

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)この環境変数の値の 1 文字目が 1 なら、 grep の最初のオペランドが一見オプションであっても考慮してはならない。 シェルは、実行するコマンドごとにこの変数を環境に置き、どのオペランドがファイル名のワイルドカード展開の結果であり、したがってオプションとして扱われるべきでないかを指定することができます。 この動作は GNU C ライブラリでのみ有効で、POSIXLY_CORRECT が設定されていない場合のみです。

Examples

egrep "support|help|windows" myfile.txt

ファイル myfile.txt でサポートヘルプとウィンドウのパターンを検索します。

egrep '^+$' myfile.txt

myfile.txt で行頭と行末がアルファベットである任意の行に一致するものを探します。

egrep -c '^begin|end$' myfile.txt

myfile.txt で ‘begin’ という単語で始まるか ‘end’ という単語で終わる行数を数える。

fgrep – 固定文字列にマッチするテキストをフィルタする。
grep – 正規表現にマッチするテキストをフィルタする。
sed – テキストをフィルタして変換するユーティリティ
sh – Bourne shell コマンドインタープリター

egrep -c '^begin|end$' myfile.txt

myfile.txt で始まる行数、または終了する行数をカウントする。

コメントを残す

メールアドレスが公開されることはありません。