Pourquoi ce résultat de grep BSD diffère-t-il de grep GNU?

13

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:

Capture d'écran

Mais si je les exécute en utilisant GNU grep (version 2.25), j'obtiens ce qui suit:

Capture d'écran

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.

Décennie Lune
la source
2
N'hésitez pas à signaler le premier comportement comme un bug.
Satō Katsura
1
Vous verrez que 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$'
Stéphane Chazelas
2
@JdeBP, sur mon OS X, 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.
ilkkachu
Nous montrons à quel point cela est trompeur. (-: Ce 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.
JdeBP

Réponses:

9

Je pense que cela pourrait être un bug dans grep de FreeBSD. Il y a un rapport de bogue avec des problèmes similaires.

Décennie Lune
la source