最近一位同行和我在GNU grep 2.5.1中发现了一个有趣的错误,其中带有大于200,000,000个字符行的标准输入会导致grep失败,即使该模式不在其中一个长行中。但是,如果grep使用grep match file
读取文件,则可以正常工作。看来这个bug在2.5.3中已经修复。
cat big_file | grep pattern # this dies with an exit code 0 after encountering a long line
grep pattern big_file # works fine!
有谁知道为什么会这样?线路限制是真正的原因吗?
答案 0 :(得分:2)
在阅读非常长的行时遇到或存在内存耗尽问题,但在大多数系统上,分配200MB不太可能失败。
http://savannah.gnu.org/bugs/?9886
我认为它直接读取时会使用内存映射文件,显然从管道读取时不是一个选项,所以也许这就是区别。
另外,你的模式有多复杂? grep有一个已知的限制,其中具有大量计数的{n,m}
选项可能会导致分配大量内存。
答案 1 :(得分:1)
我正在审查提交,但我找不到任何东西。你可以去吧。
http://git.savannah.gnu.org/cgit/grep.git/log/?ofs=200
用2.5.1链接到该页面。从那里往上走,试图找到它。