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

0

Aqui está um arquivo que eu tenho link

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

Olhando quantas linhas correspondentes 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 deve haver diferença se -P ou sem -P, mas existe. O -P está combinando muito.

Com este teste eu deveria ter o mesmo valor, porque eu estou dizendo listar todas as linhas que combinam xyz e dentro daquela lista de saída cada linha que combina xyz. Funciona sem -P.

Sem -P nada de engraçado acontecendo.

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

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

Com coisas -P acontecendo 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 fizer grep -P "[^J]*J" blahsomefile1 | more

Eu vejo que está correspondendo às coisas que não deveria corresponder, como a linha que lê txxxraabcAA , que não contém J.

txxxJbmmabcraabc
txxxraabcAA
txxxJxmmabcHaabc

O computador está executando 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>

UPDATE

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á no 2.5.4, uma versão muito antiga.

O arquivo de notas também está disponível do wetransfer e pode ser baixado de ge.tt com, por exemplo, firefox.

    
por barlop 17.10.2016 / 02:51

1 resposta

0

Isso pode ser um bug no grep 2.5.4

Se você tiver uma escolha entre gnuwin32 grep ou cygwin grep, o cygwin grep está muito mais atualizado.

-V mostra a versão e o ano, e que a partir da escrita -

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

cygwin grep está anos à frente do gnuwin32 grep. 2.21 (que é posterior a 2.5.4 porque 2.21 não é como um número aritmético com um 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 veja nenhum erro com cygwin grep 2014.

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

    
por 17.10.2016 / 06:12