Почему этот результат BSD grep отличается от GNU grep?

13

Мой компьютер работает под управлением macOS 10.12.3, и я использую установленную в системе grepутилиту с версией 2.5.1-FreeBSD.

Вот результаты, которые я получаю при тестировании различных регулярных выражений:

Скриншот

Но если я запускаю их, используя GNU grep (версия 2.25), я получаю следующее:

Скриншот

GNU grep выглядит правильно для меня, а BSD неверно, нет? Почему они отличаются? Я не понимаю, почему grep BSD соответствует «a», когда регулярное выражение указывает, что оно должно следовать за началом строки.

Десятилетие Луны
источник
2
Не стесняйтесь сообщать о первом поведении как об ошибке.
Satō
1
Вы увидите, что echo 'bababa' | grep -E '^(a|b)'все это красное. И у вас будет такая же проблема -o. Я думаю, grepищет несколько совпадений, но для второго совпадения и более, он применяет регулярное выражение к тому, что находится справа от того, что совпадало с предыдущим временем (и так ananaво втором случае в вашем случае), не пропуская флаг REG_NOTBOL. Смотрите такжеecho banana | grep -Eo '^ban|^ana$'
Стефан Шазелас
2
@JdeBP, на моей OS X, grepидентифицирует себя как grep (BSD grep) 2.5.1-FreeBSDсо страницей руководства, ссылающейся только на GNU, упоминая «длинные опции, предоставляемые для совместимости с версиями GNU». Кроме того, нет уведомления об авторских правах или упоминаний о GPL (или FSF). Если у него есть история с утилитой GNU, трудно сказать.
ilkkachu
Мы демонстрируем, как это вводит в заблуждение. (-: То, grepчто обсуждается в ответе Десятилетия Луны, о котором многие думают, что это правильно, идентифицирует как grep (GNU grep) 2.5.1-FreeBSD(как можно увидеть в обсуждении ошибок), имеет уведомление об авторских правах FSF и, безусловно, GNU grep. То, что FreeBSD называет, bsdgrepэто то, что OpenBSD вызывает grepи является BSD grep, без --colorопций вне варианта FreeBSD. Это то, что идентифицирует как grep (BSD grep) 2.5.1-FreeBSD, и по иронии судьбы это то, что один человек в обсуждении ошибок предложил переключиться grepна FreeBSD .
JdeBP

Ответы:

9

Я думаю, что это может быть ошибкой в ​​grep FreeBSD. Есть сообщение об ошибке с похожими проблемами.

Десятилетие Луны
источник