Mon ordinateur exécute macOS 10.12.3 et j'utilise l' greputilitaire installé sur le système avec la version 2.5.1-FreeBSD.
Ce sont les sorties que j'obtiens lors du test de diverses expressions régulières:
Mais si je les exécute en utilisant GNU grep (version 2.25), j'obtiens ce qui suit:
Le grep de GNU me semble correct et BSD est incorrect, non? Pourquoi diffèrent-ils? Je ne comprends pas pourquoi le grep de BSD correspond au "a" lorsque l'expression régulière spécifie qu'elle doit suivre le début de la ligne.
echo 'bababa' | grep -E '^(a|b)'tout est rouge. Et vous aurez le même problème avec -o. Je suppose que greprecherche plusieurs correspondances, mais pour la deuxième correspondance et plus, il applique l'expression rationnelle à ce qui est à droite de ce qui correspondait à l'heure précédente (ainsi de ananasuite la deuxième fois dans votre cas) sans passer le drapeau REG_NOTBOL. Voir aussiecho banana | grep -Eo '^ban|^ana$'
greps'identifie grep (BSD grep) 2.5.1-FreeBSDà la page de manuel se référant à GNU uniquement en mentionnant "les options longues fournies pour la compatibilité avec les versions de GNU". En outre, aucun avis de copyright ou mention de GPL (ou FSF). S'il a de l'histoire avec l'utilitaire GNU, c'est difficile à dire.
grepqui est discuté dans la réponse de Decade Moon que tant de gens pensent est correct identifie comme grep (GNU grep) 2.5.1-FreeBSD(comme on peut le voir dans la discussion sur les bogues), a un avis de droit d'auteur FSF et est très certainement GNU grep. Ce que FreeBSD appelle bsdgrepc'est ce qu'OpenBSD appelle grepet est BSD grep, sans --coloroption en dehors de la variante FreeBSD. C'est ce qui s'identifie grep (BSD grep) 2.5.1-FreeBSDet, ironiquement, c'est ce qu'une personne dans la discussion sur les bogues a suggéré à FreeBSD de passer grep.

