¿Por qué coincide con el patrón grep '[^a-z0-9\.\/_\-\ +@)(&]' coincide con '-'

¿Por qué coincide con el patrón grep '[^a-z0-9\.\/_\-\ +@)(&]' coincide con '-'

Estoy tratando de encontrar archivos con nombres ridículos. Estoy usando este comando:

find . -type f | egrep -i '[^a-z0-9\.\/_\-\ +@)(&]'

pero estoy un poco estupefacto porque coincide con nombres de archivos que contienen el carácter menos '-'. ¿Por qué? ¿Y cómo solucionarlo?

Editar: Procedimiento para verificar de forma reproducible este comportamiento:

Creé un archivo de prueba llamado testfile, que contiene solo un signo menos.

$ hexdump -C testfile

00000000  2d                                                |-|
egrep -i '[^a-z0-9\.\/_\-\ +@)(&]' testfile

coincide con este signo menos.

Respuesta1

El guión tiene un significado especial en una clase de caracteres, denota una variedad de caracteres.

Coloque el guión al final de la clase de carácter y elimine el escape inútil:

find . -type f | egrep -i '[^a-z0-9./_ +@)(&-]'

información relacionada