Действительно странная ошибка grep 2.5.1 в кошачьем чтении длинных строк - PullRequest
1 голос
/ 04 декабря 2009

Недавно мы с коллегой обнаружили интересную ошибку в GNU grep 2.5.1, из-за которой стандартный ввод со строками, превышающими 200 000 000 символов, приводит к сбою grep, даже если шаблон не входит в одну из длинных строк. Однако если grep читает файл с grep match file, он работает нормально. Похоже, эта ошибка исправлена ​​в 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! 

Кто-нибудь знает, почему это происходит? Является ли ограничение линии истинной причиной?

Ответы [ 2 ]

2 голосов
/ 04 декабря 2009

Есть или была проблема исчерпания памяти, с которой я столкнулся при чтении очень длинных строк, но в большинстве систем выделение 200 МБ вряд ли даст сбой.

http://savannah.gnu.org/bugs/?9886

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

Кроме того, насколько сложен ваш шаблон? Существует известное ограничение grep, когда опция {n,m} с большим количеством может привести к выделению огромных объемов памяти.

1 голос
/ 04 декабря 2009

Я просматривал коммиты, но ничего не смог найти. Вы можете попробовать это.

http://git.savannah.gnu.org/cgit/grep.git/log/?ofs=200

Это ссылка на страницу с 2.5.1. Идите туда и обратно, чтобы попытаться найти его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...