Dlaczego ten wynik grep BSD różni się od grep GNU?


13

Na moim komputerze działa system macOS 10.12.3 i korzystam z grepnarzędzia zainstalowanego w systemie w wersji 2.5.1-FreeBSD.

Oto wyniki, które otrzymuję podczas testowania różnych wyrażeń regularnych:

Zrzut ekranu

Ale jeśli uruchomię je za pomocą GNU grep (wersja 2.25), otrzymam:

Zrzut ekranu

Grep GNU wydaje mi się poprawny, a BSD jest niepoprawny, nie? Dlaczego się różnią? Nie rozumiem, dlaczego grep BSD pasuje do „a”, gdy regex określa, że ​​musi on występować na początku linii.


2
Zgłosić pierwsze zachowanie jako błąd.
Satō Katsura

1
Zobaczysz, że echo 'bababa' | grep -E '^(a|b)'wszystko jest czerwone. I będziesz miał ten sam problem z -o. Wydaje mi się, że grepszuka wielu dopasowań, ale dla drugiego dopasowania i więcej, stosuje ananawyrażenie regularne do tego, co jest po prawej stronie tego, co pasowało poprzednio (tak jak w twoim przypadku po raz drugi), nie przekazując flagi REG_NOTBOL. Zobacz takżeecho banana | grep -Eo '^ban|^ana$'
Stéphane Chazelas

2
@JdeBP, w moim OS X, grepidentyfikuje się grep (BSD grep) 2.5.1-FreeBSDze stroną podręcznika odnoszącą się do GNU tylko przez wspomnienie o „długich opcjach zapewniających kompatybilność z wersjami GNU”. Ponadto nie ma informacji o prawach autorskich ani wzmianek o GPL (lub FSF). Jeśli ma historię związaną z użytkowaniem GNU, trudno powiedzieć.
ilkkachu

Pokazujemy, jak to jest mylące. (-: To, grepco jest omówione w odpowiedzi Decade Moon, że tak wielu ludzi uważa, że ​​jest poprawne, identyfikuje jako grep (GNU grep) 2.5.1-FreeBSD(jak widać w dyskusji o błędach), ma informację o prawach autorskich FSF i jest zdecydowanie GNU grep. To, co nazywa FreeBSD, bsdgrepjest tym, co OpenBSD wywołuje grepi jest BSD grep, bez żadnej --coloropcji poza wariantem FreeBSD. To właśnie identyfikuje grep (BSD grep) 2.5.1-FreeBSDi, jak na ironię, jedna osoba w dyskusji o błędzie sugeruje, aby FreeBSD grep
przeszedł

Odpowiedzi:


Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.