Isso é um bug no grep -P ? (Parece que estou recebendo muitas correspondências aparecendo)

Isso é um bug no grep -P ? (Parece que estou recebendo muitas correspondências aparecendo)

Aqui está um arquivo que eu tenho http://www.zen76171.zen.co.uk/blahsomefile1

É um arquivo de texto com cerca de 1,18 MB de tamanho

Olhando quantas linhas correspondentes eu recebo

Com -P

C:\blah>grep -P "[^J]*J" blahsomefile1 | wc -l
72383

Sem -P

C:\blah>grep "[^J]*J" blahsomefile1 | wc -l
51814

Não deveria haver diferença se -P ou sem -P, mas existe. O -P está combinando demais.

Com este teste, devo obter a mesma figura, porque estou dizendo para listar todas as linhas que correspondem a xyz e, dentro dessa saída, listar todas as linhas que correspondem a xyz. Funciona sem -P.

Sem -P nada de engraçado acontece.

C:\blah>grep "[^J]*J" blahsomefile1 | wc -l
51814

C:\blah>grep "[^J]*J" blahsomefile1 | grep "[^J]*J" | wc -l
51814

Com -P acontecem coisas que não deveriam estar acontecendo.

C:\blah>grep -P "[^J]*J" blahsomefile1 | wc -l
72383


C:\blah>grep -P "[^J]*J" blahsomefile1 | grep -P "[^J]*J" | wc -l
72229

Se eu fizergrep -P "[^J]*J" blahsomefile1 | more

Vejo que está combinando coisas que não deveriam corresponder, como a linha que diz txxxraabcAA que não contém J.

txxxJbmmabcraabc
txxxraabcAA
txxxJxmmabcHaabc

O computador está executando o gnuwin32 grep

C:\blah>where grep
C:\Program Files (x86)\GnuWin32\bin\grep.exe

a versão do grep é 2.5.4

C:\blah>"C:\Program Files (x86)\GnuWin32\bin\grep.exe" -V
GNU grep 2.5.4

Copyright (C) 2009 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.


C:\blah>

ATUALIZAR

Curiosamente, o do cygwin é muito mais tarde .. e não tem o bug

C:\blah\aeea2\a\a\a\a>c:\cygwin\bin\grep -P "[^J]*J" blahsomefile1 | wc -l
51814

C:\blah>c:\cygwin\bin\grep -V
/usr/bin/grep (GNU grep) 2.21
Copyright (C) 2014 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Written by Mike Haertel and others, see <http://git.sv.gnu.org/cgit/grep.git/tree/AUTHORS>.

C:\blah>

gnuwin32 grep ainda está em 2.5.4 , uma versão muito antiga.

O arquivo de notas também está disponívelde wetransfere para downloadde ge.ttcom, por exemplo, Firefox.

Responder1

Este pode ser um bug no grep 2.5.4

Se você puder escolher entre gnuwin32 grep ou cygwin grep, o cygwin grep está muito mais atualizado.

-V mostra a versão e o ano, e no momento da escrita -

gnuwin32 grep é a versão 2.5.4de 2009. Anos atrás.

cygwin grep está anos à frente do gnuwin32 grep. 2.21(isso é posterior a 2.5.4 porque 2.21 não é como um número aritmético com ponto decimal) e o ano do grep do cygwin é 2014.

C:\blah>c:\cygwin\bin\grep -P "[^J]*J" blahsomefile1 | wc -l
51814

C:\blah>c:\cygwin\bin\grep -P "[^J]*J" blahsomefile1 | c:\cygwin\bin\grep -P "[^J]*J" | wc -l
51814

Não vejo nenhum erro com o cygwin grep, que é 2014.

Esta não é a primeira vez que encontro um bug na versão gnuwin32 do grep, quando a versão cygwin do grep era muito mais recente e boa. O gnuwin32 parece estar muito desatualizado em comparação com as alternativas.

informação relacionada