Чому цей результат BSD grep відрізняється від GNU grep?


13

На моєму комп’ютері працює macOS 10.12.3, і я використовую встановлену системою grepутиліту версії 2.5.1-FreeBSD.

Це результати, які я отримую при тестуванні різних регексів:

Знімок екрана

Але якщо я запускаю їх за допомогою GNU grep (версія 2.25), я отримую наступне:

Знімок екрана

Греп GNU мені здається правильним, а BSD - неправильним, ні? Чому вони відрізняються? Я не розумію, чому греп BSD відповідає "a", коли регулярний вираз визначає, що він повинен слідувати початку рядка.


2
Не соромтеся повідомляти про першу поведінку як про помилку.
Satō Katsura

1
Ви побачите, що echo 'bababa' | grep -E '^(a|b)'все червоне. І у вас буде та сама проблема -o. Я думаю, grepшукає кілька матчів, але для другого матчу і більше, він застосовує регулярне вираження до того, що праворуч від того, що відповідало попередньому разу (так ananaвдруге у вашому випадку), не передаючи прапор REG_NOTBOL. Дивіться такожecho banana | grep -Eo '^ban|^ana$'
Стефан Шазелас

2
@JdeBP, на моїй ОС 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.