Вот файл, который у меня есть http://www.zen76171.zen.co.uk/blahsomefile1

Это текстовый файл размером около 1,18 МБ

Смотря на сколько совпадающих строк я получаю

С -P

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

Без -P

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

Не должно быть разницы, -P или без -P, но есть. -P слишком много соответствует.

В этом тесте я должен получить ту же цифру, потому что я говорю список каждой строки, которая соответствует xyz, и в этом выходном списке каждая строка, которая соответствует xyz. Работает без -P.

Без -Р ничего смешного не происходит.

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

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

С -P происходит то, что не должно происходить ..

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


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

Если я сделаю grep -P "[^J]*J" blahsomefile1 | more

Я вижу, что это соответствует вещам, которые не должны совпадать, например, строка, которая читает txxxraabcAA которая не содержит J.

txxxJbmmabcraabc
txxxraabcAA
txxxJxmmabcHaabc

Компьютер работает GNU Gnuwin32

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

версия 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>

ОБНОВИТЬ

Интересно, что Cygwin гораздо позже .. и не имеет ошибки

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 все еще на 2.5.4, очень старая версия.

Файл примечаний также доступен с сайта wetransfer и загружается с сайта ge.tt, например, с помощью firefox.

1 ответ1

0

Это может быть ошибка в grep 2.5.4

Если у вас есть выбор между gnuwin32 grep или cygwin grep, cygwin grep будет гораздо более современным.

-V показывает версию и год, и что на момент написания -

Gnuwin32 grep - это версия 2.5.4 , это 2009 год. Годы позади

greg cygwin на годы опережает grep gnuwin32. 2.21 (это позже, чем 2.5.4, потому что 2.21 не похож на одно арифметическое число с десятичной точкой), и год greg 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

Не вижу ошибки там с cygwin grep, который является 2014.

Это не первый раз, когда я сталкиваюсь с ошибкой в gnuwin32-версии grep, когда cygwin-версия grep была намного позже и в порядке. Gnuwin32, кажется, очень устарел по сравнению с альтернативами.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .