grep -eオプションとgrep -Eオプションの違いは何ですか?


34

との違いを理解しようgrep -eとしていgrep -Eます。今からgrep manpage私は得た:

-E、-extended-regexp

PATTERNを拡張正規表現として解釈します(以下を参照)。

-eパターン、-regexp = PATTERN

パターンとしてPATTERNを使用します。次で始まるパターンを保護するのに便利です-

上記の説明は私には意味がありません。

だから、誰かexamplesが2つの違いとどのオプションを使用するかを使用してそれを説明できますか?

PS:バージョン:grep(GNU grep)2.10



3
-e本当の目的は、正規表現がダッシュで始まるときを明確にすることです。だからgrep ---foo与えるunrecognized option: ---foogrep -e ---foo、正規表現のgrepを言うことができます---foo
トリプリー

回答:


29

-e厳密に照合するパターンを示すためのフラグです。-E特定の特殊文字をエスケープする必要があるかどうかを制御します。

man grep-Eもう少し説明します:

   Basic vs Extended Regular Expressions
   In basic regular expressions the meta-characters ?, +, {, |, (, and ) lose their special meaning; instead use the backslashed versions \?, \+, \{, \|, \(, and \).

   Traditional  egrep  did  not  support  the  {  meta-character, and some egrep implementations support \{ instead, so portable scripts should avoid { in grep -E patterns and should use [{] to match a
   literal {.

   GNU grep -E attempts to support traditional usage by assuming that { is not special if it would be the start of an invalid interval specification.  For example, the command grep -E '{1' searches for
   the two-character string {1 instead of reporting a syntax error in the regular expression.  POSIX.2 allows this behavior as an extension, but portable scripts should avoid it.

2
これは、私はない理由ですecho "hello" | grep -o -e 'h|l'ので、私は何も出力を得るない|その特別な意味を失い、私が行うときecho "hello" | grep -o -E 'h|l'、私は所望の出力を得ることが。

2
はい。この場合echo "hello" | grep -o -e 'h' -e 'l'-E離れて投げたい場合に動作します。
-hafichuk

3
grep -e -o 'h|l'文字どおりに一致h|lgrep -e -o 'h\|l'ますが、一致するhl、または-Eを使用すると逆になります。
NahuelFouilleul

@ronnie残念ながら、SEサイト間で「機能」をフォローするには200以上の評判が必要です
...-hafichuk

5

またgrep -e:検索のためのいくつかの文字列を使用することができます'grep -e 'abc' -e 'def' -e '123'。この文字列の3つのすべてを検索します:abcだけでなく、def123

これはgrep 'abc\|def\|123'、の\|略に似ていますorが、読みやすくすることができます。

最も重要な事実grep -Eはすでにここで説明されているので、このトピックで要約したものを非常に似た質問に追加したいと思います:Bashで二重文字を見つけるための正規表現


3

下記参照

/ extended

grepは、「basic」、「extended」、および「perl」の3つの異なるバージョンの正規表現構文を理解します。GNUgrepでは、基本構文と拡張構文の間に使用可能な機能に違いはありません。他の実装では、基本的な正規表現はそれほど強力ではありません。次の説明は、拡張正規表現に適用されます。基本的な正規表現の違いは後で要約されます。Perlの正規表現は追加の機能を提供し、pcresyntax(3)およびpcrepattern(3)で文書化されていますが、すべてのシステムで利用できるとは限りません。

だから、もう一度。

GNU grepでは、基本構文と拡張構文の間に利用可能な機能に違いはありません


2
機能は基本と拡張の間で同じですが、構文が多少異なります。特別のような文字の正規表現()|基本的な正規表現でその特別な意味を持つようにバックスラッシュでエスケープするなどの必要はなく、拡張中(彼らは、文字列リテラルとして扱われることをエスケープする必要がある場所)
CAS

1

-eオプションについて詳しく説明します。-e多くの場合、オプションです。

grep PATTERN

と同じです

grep -e PATTERN

以前の回答およびmanページで述べられているように、複数の検索パターンがある場合、またはハイフン(-)で始まるパターンを保護する場合を除きます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.