Apakah ini bug di grep -P? (Sepertinya saya mendapatkan terlalu banyak pertandingan yang muncul)

0

Ini adalah file yang saya miliki http://www.zen76171.zen.co.uk/blahsomefile1

Ini adalah file teks berukuran sekitar 1,18MB

Melihat berapa banyak garis yang cocok saya dapatkan

Dengan -P

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

Tanpa -P

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

Seharusnya tidak ada perbedaan apakah -P atau tanpa -P, tetapi ada. -P terlalu banyak cocok.

Dengan tes ini saya harus mendapatkan angka yang sama karena saya katakan daftar setiap baris yang cocok dengan xyz dan dalam daftar output setiap baris yang cocok dengan xyz. Ini bekerja tanpa -P.

Tanpa -P tidak ada yang lucu terjadi.

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

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

Dengan -P hal-hal terjadi yang seharusnya tidak terjadi ..

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


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

Jika aku melakukan grep -P "[^J]*J" blahsomefile1 | more

Saya melihat itu cocok dengan hal-hal yang seharusnya tidak cocok, seperti baris yang berbunyi txxxraabcAA yang tidak mengandung J.

txxxJbmmabcraabc
txxxraabcAA
txxxJxmmabcHaabc

Komputer menjalankan gnuwin32 grep

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

versi grep adalah 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>

MEMPERBARUI

Yang menarik adalah cygwin jauh lebih lambat .. dan tidak memiliki 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 masih di 2.5.4, versi yang sangat lama.

Catatan- file juga tersedia dari wetransfer dan dapat diunduh dari ge.tt dengan eg firefox.

barlop
sumber
1
Saya tidak dapat mereproduksi masalah ini di Linux menggunakan versi GNU grep saat ini: 2.26. Anda mungkin ingin melihat apakah Anda dapat memperbarui perangkat lunak Anda: versi 2.5.4 tanggal hingga 2009
John1024

Jawaban:

0

Ini mungkin bug di grep 2.5.4

Jika Anda memiliki pilihan antara gnuwin32 grep atau cygwin grep, cygwin grep jauh lebih mutakhir.

-V menunjukkan versi dan tahun, dan pada saat penulisan -

gnuwin32 grep adalah versi 2.5.4yang 2009. Tahun di belakang.

cygwin grep adalah tahun di depan gnuwin32 grep. 2.21(itu lebih dari 2.5.4 karena 2.21 tidak seperti satu nomor aritmatika dengan titik desimal) dan tahun grep cygwin adalah 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

Lihat tidak ada kesalahan di sana dengan cygwin grep yang 2014.

Ini bukan pertama kalinya saya bertemu bug di grep versi gnuwin32 ketika grep versi cygwin jauh lebih baik dan lebih baik. gnuwin32 tampaknya sangat ketinggalan zaman dibandingkan dengan alternatif.

barlop
sumber