Estou tentando entender a diferença entre grep -e
e grep -E
. Agora, grep manpage
eu tenho:
-E, --extended-regexp
Interprete PATTERN como uma expressão regular estendida (veja abaixo).
-e PATTERN, --regexp = PATTERN
Use PATTERN como padrão; útil para proteger padrões começando com -
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 qual opção.
PS: Versão: grep (GNU grep) 2.10
-e
realmente é apenas desambiguar quando um regex começa com um traço. Entãogrep ---foo
dá,unrecognized option: ---foo
mas você pode dizergrep -e ---foo
para grep pela expressão regular---foo
.Respostas:
-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:fonte
echo "hello" | grep -o -e 'h|l'
obtenho saída porque|
perdi seu significado especial e quandoecho "hello" | grep -o -E 'h|l'
obtenho a saída desejada.echo "hello" | grep -o -e 'h' -e 'l'
funcionará se você quiser jogar-E
fora neste caso.grep -e -o 'h|l'
irá corresponder a, literalmente,h|l
enquantogrep -e -o 'h\|l'
irá corresponderh
oul
e com -E é o contrárioTambém
grep -e
permite usar várias strings para pesquisa:'grep -e 'abc' -e 'def' -e '123'
procurará todas as três strings:abc
assim comodef
e123
.Isso funciona muito parecido com o local
grep 'abc\|def\|123'
onde\|
está,or
mas pode ser um pouco mais claro de se ler.Como os fatos mais importantes
grep -E
já estão explicados aqui, só quero acrescentar o que resumi sobre este tópico a uma pergunta bastante semelhante: Expressão regular para encontrar caracteres duplos no Bashfonte
/ estendido
Então, mais uma vez.
fonte
(
,)
,|
etc necessidade de ser ter o seu significado especial em regexp básico, mas não em estendido (onde eles precisam ser escapado para ser tratado como um literal string) escapou-barra invertidaApenas para elaborar a
-e
opção.-e
geralmente é opcional:é idêntico a
a menos que, conforme declarado em uma Resposta anterior e nas páginas de manual, haja vários padrões de pesquisa ou para proteger um padrão que comece com um hífen (-).
fonte