2012-09-04 5 views
6

Parece que la versión en stock de grep (información de versión: grep (BSD grep) 2.5.1-FreeBSD) bajo mac os 10.8 tiene un problema con los patrones que comparten un prefijo común cuando se ejecutan en modo regex de línea (-x). En el siguiente ejemplo mínimo, esperaría que grep informe "prueba" y "prueba 2", pero en su lugar solo se informa "prueba". (Lo mismo ocurre con el modo de expresión regular de palabra (-w)).grep (BSD grep) 2.5.1-FreeBSD en mac os 10.8 modo de expresión regular de línea que no funciona con patrones superpuestos

printf "test\ntest2\n" > f1.txt 
printf "test\ntest2\n" > f2.txt 
grep -x -F -f f1.txt f2.txt 

¿Alguien más ha hecho observaciones similares o incluso conoce una solución alternativa?

+0

parece un error, no puedo ponerme a prueba. Como solución, ¿ha intentado cambiar las posiciones de prueba y prueba2 en f1.txt? – akostadinov

Respuesta

4

verificado; esto parece un error en Apple y/o FreeBSD grep. (Esto no me sorprende, FreeBSD grep es una pila de poo que odia los estándares. Mi empleador instala GNU grep en todos nuestros sistemas Mac en lugar de tolerar el comportamiento absurdo de FreeBSD. Y sí, GNU grep encuentra ambas líneas en tu ejemplo.)

Si la portabilidad entre Mac y Linux es un objetivo, recomiendo fuertemente el abandono grep por completo y sólo utilizando perl (o algo así ack, que depende de perl).

La sugerencia de @akostadinov de poner patrones más largos antes de los más cortos en f2.txt parece funcionar alrededor del error, pero desconfiaría de confiando en en algo así. Funciona en este ejemplo de juguete, pero, ¿funciona en general, y qué tan costoso será cuando lo descubras?

Cuestiones relacionadas