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 quegrep
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 deanana
suite la deuxième fois dans votre cas) sans passer le drapeau REG_NOTBOL. Voir aussiecho banana | grep -Eo '^ban|^ana$'
grep
s'identifiegrep (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 commegrep (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 GNUgrep
. Ce que FreeBSD appellebsdgrep
c'est ce qu'OpenBSD appellegrep
et est BSDgrep
, sans--color
option en dehors de la variante FreeBSD. C'est ce qui s'identifiegrep (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 passergrep
.Réponses:
Je pense que cela pourrait être un bug dans grep de FreeBSD. Il y a un rapport de bogue avec des problèmes similaires.
la source