这是grep -P中的错误吗?(我好像出现了太多的比赛)


0

这是我的文件 http://www.zen76171.zen.co.uk/blahsomefile1

这是一个大约1.18MB的文本文件

看看我得到了多少匹配线

用-P

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

没有-P

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

无论是-P还是没有-P,都应该没有区别,但是有。-P匹配太多了。

通过这个测试,我应该得到相同的数字'cos我所说的列表匹配xyz的每一行,并在该输出列表中每一行匹配xyz。它没有-P工作。

没有-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

计算机正在运行gnuwin32 grep

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>

UPDATE

有趣的是,cygwin的一个更晚了......并且没有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仍然是2.5.4,一个非常老的版本。

注意-文件也可从wetransfer和下载从ge.tt如与Firefox浏览器。


1
我无法使用当前版本的GNU grep:2.26在Linux上重现此问题。您可能想看看是否可以更新您的软件:版本2。5。4日期到2009年
John1024年

Answers:


0

这可能是grep 2.5.4中的一个错误

如果你可以选择gnuwin32 grep或cygwin grep,那么cygwin grep就更新了。

-V显示版本和年份,以及写作时 -

gnuwin32 grep是2.5.42009年的版本。落后了。

cygwin grep比gnuwin32 grep领先多年。 2.21(这比2.5.4晚,因为2.21不像一个带小数点的算术数字),而cygwin的grep年份是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中的一个bug,因为grep的cygwin版本要晚得多。与替代品相比,gnuwin32似乎已经过时了。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.