Почему этот результат 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

Ответы:


Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.