Por que esse resultado do BSD grep difere do GNU grep?

13

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:

Captura de tela

Mas se eu os executar usando o GNU grep (versão 2.25), obtenho o seguinte:

Captura de tela

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.

Lua da década
fonte
2
Sinta-se livre para relatar o primeiro comportamento como um bug.
Satō Katsura
1
Você verá que 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$'
Stéphane Chazelas
2
O @JdeBP, no meu OS X, 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.
Ilkkachu
Estamos demonstrando como isso é enganoso. (-: O 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.
JdeBP

Respostas:

9

Eu acho que isso pode ser um bug no grep do FreeBSD. Há um relatório de erro com problemas semelhantes.

Lua da década
fonte