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.
2
Siéntase libre de informar el primer comportamiento como un error.
—
Satō Katsura
Verás que
—
Stéphane Chazelas
echo 'bababa' | grep -E '^(a|b)'
todo es rojo. Y tendrás el mismo problema con -o
. Supongo que grep
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$'
@JdeBP, en mi OS X, se
—
ilkkachu
grep
identifica a sí mismo como grep (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.
Estamos demostrando cómo esto es engañoso. (-: Lo
—
JdeBP
grep
que se discute en la respuesta de Decade Moon que tantas personas piensan que es correcto se identifica como grep (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 GNU grep
. Lo que FreeBSD llama bsdgrep
es lo que OpenBSD llama grep
y es BSD grep
, sin ninguna --color
opción fuera de la variante de FreeBSD. Eso es lo que se identifica como grep (BSD grep) 2.5.1-FreeBSD
, e irónicamente, es lo que una persona en la discusión de errores sugirió que FreeBSD cambiara grep
.