Mon ordinateur exécute macOS 10.12.3 et j'utilise l' grep
utilitaire 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 grep
recherche 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 anana
suite la deuxième fois dans votre cas) sans passer le drapeau REG_NOTBOL. Voir aussiecho banana | grep -Eo '^ban|^ana$'
grep
s'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.
grep
qui 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 bsdgrep
c'est ce qu'OpenBSD appelle grep
et est BSD grep
, sans --color
option en dehors de la variante FreeBSD. C'est ce qui s'identifie grep (BSD grep) 2.5.1-FreeBSD
et, ironiquement, c'est ce qu'une personne dans la discussion sur les bogues a suggéré à FreeBSD de passer grep
.