Meu computador está executando o macOS 10.12.3 e estou usando o grep
utilitário instalado pelo sistema com a versão 2.5.1-FreeBSD.
Estas são as saídas que recebo ao testar várias regexes:
Mas se eu os executar usando o GNU grep (versão 2.25), obtenho o seguinte:
O grep do GNU parece correto para mim e o BSD está incorreto, não? Por que eles diferem? Não entendo por que o grep do BSD corresponde ao "a" quando o regex especifica que deve seguir o início da linha.
2
Sinta-se livre para relatar o primeiro comportamento como um bug.
—
Satō Katsura
Você verá que
—
Stéphane Chazelas
echo 'bababa' | grep -E '^(a|b)'
tudo está vermelho. E você terá o mesmo problema com -o
. Eu acho que grep
procura várias correspondências, mas, para a segunda e mais vezes, ela aplica a regexp à direita do que correspondeu à hora anterior (assim como anana
na segunda vez no seu caso) sem passar a bandeira REG_NOTBOL. Veja tambémecho banana | grep -Eo '^ban|^ana$'
O @JdeBP, no meu OS X,
—
Ilkkachu
grep
identifica-se como grep (BSD grep) 2.5.1-FreeBSD
na página de manual referente ao GNU apenas mencionando "opções longas fornecidas para compatibilidade com versões do GNU". Além disso, nenhum aviso de direitos autorais ou menção à GPL (ou FSF). Se ele tem histórico com o utilitário GNU, é difícil dizer.
Estamos demonstrando como isso é enganoso. (-: O
—
JdeBP
grep
que é discutido na resposta de Decade Moon, que tantas pessoas pensam que é correto, identifica como grep (GNU grep) 2.5.1-FreeBSD
(como pode ser visto na discussão de bugs), tem um aviso de direitos autorais da FSF e é definitivamente o GNU grep
. O que o FreeBSD chama bsdgrep
é o que o OpenBSD chamadas grep
e é BSD grep
, sem --color
opção outwith a variante FreeBSD isso é o que identifica como. grep (BSD grep) 2.5.1-FreeBSD
, e, ironicamente, é o que uma pessoa na discussão bug sugeriu que o interruptor FreeBSD grep
para.