Meu computador está executando o macOS 10.12.3 e estou usando o greputilitá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 grepprocura várias correspondências, mas, para a segunda e mais vezes, ela aplica a regexp à direita do que correspondeu à hora anterior (assim como ananana 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
grepidentifica-se como grep (BSD grep) 2.5.1-FreeBSDna 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
grepque é 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 grepe é BSD grep, sem --coloropçã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 greppara.

