Mi computadora ejecuta macOS 10.12.3 y estoy usando la greputilidad instalada en el sistema con la versión 2.5.1-FreeBSD.
Estas son las salidas que obtengo al probar varias expresiones regulares:
Pero si ejecuto estos utilizando GNU grep (versión 2.25) obtengo lo siguiente:
El grep de GNU me parece correcto y los BSD son incorrectos, ¿no? ¿Por qué difieren? No entiendo por qué grep de BSD coincide con la "a" cuando la expresión regular especifica que debe seguir el comienzo de la línea.



echo 'bababa' | grep -E '^(a|b)'todo es rojo. Y tendrás el mismo problema con-o. Supongo quegrepbusca múltiples coincidencias, pero para la segunda coincidencia y más, aplica la expresión regular a lo que está a la derecha de lo que coincidió la vez anterior (asíananaen la segunda vez en su caso) sin pasar el indicador REG_NOTBOL. Ver tambiénecho banana | grep -Eo '^ban|^ana$'grepidentifica a sí mismo comogrep (BSD grep) 2.5.1-FreeBSDcon la página de manual que se refiere a GNU solo al mencionar "opciones largas proporcionadas para compatibilidad con versiones de GNU". Además, no hay aviso de copyright o menciones de GPL (o FSF). Si tiene historia con la utilidad GNU, es difícil saberlo.grepque se discute en la respuesta de Decade Moon que tantas personas piensan que es correcto se identifica comogrep (GNU grep) 2.5.1-FreeBSD(como se puede ver en la discusión del error), tiene un aviso de derechos de autor FSF y definitivamente es GNUgrep. Lo que FreeBSD llamabsdgrepes lo que OpenBSD llamagrepy es BSDgrep, sin ninguna--coloropción fuera de la variante de FreeBSD. Eso es lo que se identifica comogrep (BSD grep) 2.5.1-FreeBSD, e irónicamente, es lo que una persona en la discusión de errores sugirió que FreeBSD cambiaragrep.Respuestas:
Creo que esto podría ser un error en grep de FreeBSD. Hay un informe de error con problemas similares.
fuente