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:
Ale jeśli uruchomię je za pomocą GNU grep (wersja 2.25), otrzymam:
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.
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$'
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ć.
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

