.png)
Aquí hay un archivo que tengo. http://www.zen76171.zen.co.uk/blahsomefile1
Es un archivo de texto de aproximadamente 1,18 MB de tamaño.
Mirando cuántas líneas coincidentes obtengo
Con p
C:\blah>grep -P "[^J]*J" blahsomefile1 | wc -l
72383
Sin -P
C:\blah>grep "[^J]*J" blahsomefile1 | wc -l
51814
No debería haber diferencia entre -P o sin -P, pero la hay. El -P coincide demasiado.
Con esta prueba debería obtener la misma cifra porque estoy diciendo que enumere cada línea que coincida con xyz y dentro de esa lista de salida cada línea que coincida con xyz. Funciona sin -P.
Sin -P no pasa nada gracioso.
C:\blah>grep "[^J]*J" blahsomefile1 | wc -l
51814
C:\blah>grep "[^J]*J" blahsomefile1 | grep "[^J]*J" | wc -l
51814
Con -P suceden cosas que no deberían estar sucediendo.
C:\blah>grep -P "[^J]*J" blahsomefile1 | wc -l
72383
C:\blah>grep -P "[^J]*J" blahsomefile1 | grep -P "[^J]*J" | wc -l
72229
Si lo hagogrep -P "[^J]*J" blahsomefile1 | more
Veo que coincide con cosas que no debería coincidir, como la línea que dice txxxraabcAA
que no contiene J.
txxxJbmmabcraabc
txxxraabcAA
txxxJxmmabcHaabc
La computadora está ejecutando gnuwin32 grep
C:\blah>where grep
C:\Program Files (x86)\GnuWin32\bin\grep.exe
La versión de grep es 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>
ACTUALIZAR
Curiosamente el de cygwin es mucho posterior... y no tiene el error
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 todavía está en 2.5.4, una versión muy antigua.
Nota: el archivo también está disponiblede wetransfery descargablede ge.ttcon, por ejemplo, Firefox.
Respuesta1
Esto puede ser un error en grep 2.5.4
Si puede elegir entre gnuwin32 grep o cygwin grep, cygwin grep está mucho más actualizado.
-V muestra la versión y el año, y eso al momento de escribir este artículo -
gnuwin32 grep es la versión 2.5.4
de 2009. Años de retraso.
cygwin grep está años por delante de gnuwin32 grep. 2.21
(eso es posterior a 2.5.4 porque 2.21 no es como un número aritmético con un punto decimal) y el año del grep de cygwin es 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
No veo ningún error allí con cygwin grep que es 2014.
Esta no es la primera vez que me encuentro con un error en la versión gnuwin32 de grep cuando la versión cygwin de grep era mucho posterior y estaba bien. gnuwin32 parece estar muy desactualizado en comparación con otras alternativas.