Se avete un Mac, provate questo:grep -f su OS X produce segfault
echo 'abcd*' > grepfile
echo 'abc$' >> grepfile
echo '^abc' >> grepfile
echo "fojeiwuroiuwet\nljfajsljkfabcdddjlfkajlkj\nabcaaa\nzzzabc\n" | grep -f grepfile
Ecco la versione:
$ grep --v
grep (BSD grep) 2.5.1-FreeBSD
Questa è una macchina (una rMBP del 2012 flavor) che è tenuto aggiornato con gli aggiornamenti software di Apple, quindi sono su 10.8.4.
Ho verificato che GNU grep
compilato dalla sorgente non soffre di questo problema. In effetti è la versione 2.14, che è un sacco di versioni precedenti alla 2.5.1.
Ma come si potrebbe ottenere il compito di testare alcuni input su una serie di regex in caso contrario, senza un ciclo molto inefficiente che genera un grep per ogni regex?
Modifica: l'approccio che ho seguito per risolvere questo problema era simile a: while read REGEX; do [[ ... =~ $REGEX ]] ... done < regexfile
.
Domanda: Si tratta di un bug noto con questa versione di grep? Come possiamo configurare i nostri sistemi in modo che funzionino correttamente con un file di regex su grep?
Aggiornamento: Sembra che alcuni utenti stiano segnalando che funziona correttamente (anche con questo particolare FreeBSD 2.5.1 grep). Quali sono alcuni passi che posso fare per cercare di capire quale .so/.dylib potrebbe usare? Qualcuno può fare un shasum /usr/bin/grep
e dirmi se funziona per te? (Non sono sicuro se questo sarebbe fornire molte informazioni, ma quello che sto cercando è se la configurazione del mio computer è avvitato, o se questo è un problema effettivo esistente con questa versione del software.)
$ shasum /usr/bin/grep
eac59389d09642decbb8551e2c975f795934bfbf /usr/bin/grep
Ecco ulteriori informazioni:
$ 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
ulteriori indagini:
$ 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)
ho ripartito la macchina pure. Ripetutamente fa la stessa cosa in gdb.
Quindi sono passato al mio Macbook Air e ha funzionato, quindi ho controllato e ha installato homebrew grep 2.14. Credo che stavo testando grep vs ack nel giorno in cui ho saputo di Ack. Quindi questo è un altro modo per ottenere un grep corretto su un Mac, usare homebrew. Questo è stato un po 'triste perché ho usato homebrew per ottenere 'gettext' per compilare grep senza nemmeno cercare' grep' in primo luogo ... –
È fastidioso trovare nuovamente le risposte alle cose già trovate da passato-me . È una formula di fermentazione 'homebrew/dupes/grep'. –
FWIW, il tuo esempio funziona perfettamente con Apple/usr/bin/grep (anche 2.5.1-FreeBSD) fornito con OS X 10.8.4. –