grep -f en OS X produce segfault
Si tienes una Mac, prueba esto:
echo 'abcd*' > grepfile
echo 'abc$' >> grepfile
echo '^abc' >> grepfile
echo "fojeiwuroiuwet\nljfajsljkfabcdddjlfkajlkj\nabcaaa\nzzzabc\n" | grep -f grepfile
Aquí está la versión:
$ grep --v
grep (BSD grep) 2.5.1-FreeBSD
Esta es una máquina (un rMBP del sabor de 2012) que está al día con las actualizaciones de software de Apple, así que estoy en 10.8.4.
Verifiqué que GNUgrep
compilado desde la fuente no sufre de este problema. De hecho, es la versión 2.14, que es una gran cantidad de versiones pasadas de 2.5.1.
Pero, ¿cómo podría uno lograr la tarea de probar algunos datos de entrada contra una serie de expresiones regulares de lo contrario, sin un bucle muy ineficiente que genere un grep para cada expresión regular?
Edit: El enfoque que tomé para solucionar esto fue algo similar a:while read REGEX; do [[ ... =~ $REGEX ]] ... done < regexfile
.
Pregunta: ¿Es este un error conocido con esta versión de grep? ¿Cómo podemos configurar nuestros sistemas para que funcionen correctamente con un archivo de expresiones regulares para grep?
Actualización: Parece que algunas personas informan que funciona bien (incluso con este grep FreeBSD 2.5.1 en particular). ¿Cuáles son algunos pasos que puedo tomar para tratar de averiguar qué .so / .dylib podría estar usando? Alguien puede hacer unshasum /usr/bin/grep
y dime si te funciona? (No estoy seguro de si eso proporcionaría mucha información, pero lo que busco es si la configuración de mi computadora está equivocada o si este es un problema real existente con esta versión del software).
$ shasum /usr/bin/grep
eac59389d09642decbb8551e2c975f795934bfbf /usr/bin/grep
Aquí hay más información:
$ codesign -dvvv /usr/bin/grep
Executable=/usr/bin/grep
Identifier=com.apple.zgrep
Format=Mach-O thin (x86_64)
CodeDirectory v=20100 size=224 flags=0x0(none) hashes=6+2 location=embedded
Hash type=sha1 size=20
CDHash=93b823c000188f8737653d8333c90a6db9361d70
Signature size=4064
Authority=Software Signing
Authority=Apple Code Signing Certification Authority
Authority=Apple Root CA
Info.plist=not bound
Sealed Resources=none
Internal requirements count=2 size=208
Investigación exahustiva:
$ gdb /usr/bin/grep
GNU gdb 6.3.50-20050815 (Apple version gdb-1824) (Thu Nov 15 10:42:43 UTC 2012)
Copyright 2004 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB. Type "show warranty" for details.
This GDB was configured as "x86_64-apple-darwin"...Reading symbols for shared libraries .... done
(gdb) start -f grepfile
Function "main" not defined.
Make breakpoint pending on future shared library load? (y or [n])
Starting program: /usr/bin/grep -f grepfile
Reading symbols for shared libraries +++.............................. done
abc
abc
Program received signal EXC_BAD_ACCESS, Could not access memory.
Reason: KERN_INVALID_ADDRESS at address: 0x0000000101000000
0x00007fff89b5d1b3 in memchr ()
(gdb) where
#0 0x00007fff89b5d1b3 in memchr ()
#1 0x00007fff89b8e45a in __sfvwrite ()
#2 0x00007fff89b8e861 in fwrite ()
#3 0x0000000100003138 in _mh_execute_header ()
#4 0x0000000100002988 in _mh_execute_header ()
#5 0x0000000100001c28 in _mh_execute_header ()
#6 0x00007fff8e2d57e1 in start ()
(gdb)
He reiniciado la máquina también. Repetiblemente hace lo mismo en gdb.