Mi computadora ejecuta macOS 10.12.3 y estoy usando la grep
utilidad 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 quegrep
busca 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íanana
en la segunda vez en su caso) sin pasar el indicador REG_NOTBOL. Ver tambiénecho banana | grep -Eo '^ban|^ana$'
grep
identifica a sí mismo comogrep (BSD grep) 2.5.1-FreeBSD
con 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.grep
que 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 llamabsdgrep
es lo que OpenBSD llamagrep
y es BSDgrep
, sin ninguna--color
opció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