Qual é a diferença entre a opção grep -e e grep -E?

32

Estou tentando entender a diferença entre grep -e e grep -E . Agora de grep manpage eu tenho:

-E, --extended-regexp

Interpret PATTERN as an extended regular expression (see below).

-e PATTERN, --regexp=PATTERN

Use PATTERN as the pattern; useful to protect patterns beginning with -

A explicação acima não faz sentido para mim.

Então, alguém pode me explicar usando examples qual é a diferença entre os dois e quando usar essa opção.

PS: Versão: grep (GNU grep) 2.10

    
por ronnie 10.10.2012 / 20:56

4 respostas

26

-e é estritamente o sinalizador para indicar o padrão com o qual você deseja corresponder. -E controla se você precisa escapar de certos caracteres especiais.

man grep explica -E um pouco mais:

   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.
    
por 10.10.2012 / 21:02
4

Além disso, grep -e permite usar várias sequências para pesquisas: 'grep -e 'abc' -e 'def' -e '123' procurará todas as três strings: abc e def e 123 .

Isso funciona bem parecido com grep 'abc\|def\|123' , em que \| representa or , mas pode ser um pouco mais claro de se ler.

Como os fatos mais importantes sobre grep -E já estão explicados aqui, só quero acrescentar o que resumi sobre esse tópico em uma pergunta bastante semelhante: Expressão Regular para encontrar caracteres duplos no Bash

    
por 06.05.2013 / 01:38
3

see below

/ extended

grep understands three different versions of regular expression syntax: “basic,” “extended” and “perl.” In GNU grep, there is no difference in available functionality between basic and extended syntaxes. In other implementations, basic regular expressions are less powerful. The following description applies to extended regular expressions; differences for basic regular expressions are summarized afterwards. Perl regular expressions give additional functionality, and are documented in pcresyntax(3) and pcrepattern(3), but may not be available on every system.

Então, mais uma vez.

In GNU grep, there is no difference in available functionality between basic and extended syntaxes

    
por 10.10.2012 / 20:59
0

Apenas para elaborar a opção -e . -e é geralmente opcional:

grep PATTERN

é idêntico a

grep -e PATTERN

a menos que, conforme indicado em uma Resposta anterior e nas páginas man, existam vários padrões de pesquisa ou para proteger um padrão que comece com um hífen (-).

    
por 01.10.2018 / 03:47

Tags