grep dice 'rango de caracteres no válido'

grep dice 'rango de caracteres no válido'

Entonces estoy usando una combinación de findy greppara filtrar una lista de nombres de archivos de un documento de texto sin formato.

Aquí está el comando que ejecuto:

find /Volumes/Documents\ -\ Part\ 1/July 2009 -type f | grep -vf files.txt

En archivos.txt tengo esto:

/Volumes/Documents - Part 1/July 2009/vacation.pdf
/Volumes/Documents - Part 1/July 2009/pie time!.jpg
/Volumes/Documents - Part 1/July 2009/Coding/Unix/sample.sh
/Volumes/Documents - Part 1/July 2009/trip-to-spain.pages

Quiero que genere líneas que no coincidan, pero en su lugar aparece esto:

grep: invalid character range

¿Cuál es la causa de esto? Hay mucho más en files.txt, simplemente lo omití porque sería demasiado largo. También tengo varios caracteres Unicode allí. ¿Podría eso estar causando algún problema?

Mac OS X Yosemite, versión bash 3.2.57(1), grep (BSD grep) 2.5.1-FreeBSD

Respuesta1

TLDR; agregar-F


La -fopción grep se utiliza para hacer referencia a un archivo que contiene una lista depatrones- su archivo no contiene una lista de patrones, contiene una lista de nombres de archivos

hombre grep

-f ARCHIVO, --file=ARCHIVO Obtener patrones del ARCHIVO, uno por línea. El archivo vacío no contiene patrones y, por lo tanto, no coincide con nada. (-f lo especifica POSIX).

Debe asegurarse de que todos los metacaracteres en sus nombres de archivos tengan caracteres de escape, a menos que desee que se traten como metacaracteres.


$ cat files.txt
/Volumes/Documents - Part 1/July 2009/vacation.pdf
/Volumes/Documents - Part 1/July 2009/pie time!.jpg
/Volumes/Documents - Part 1/July 2009/Coding/Unix/sample.sh
/Volumes/Documents - Part 1/July 2009/trip-to-spain.pages

$ echo a | grep -vf files.txt
a

Me parece que su archivos.txt probablemente contenga más de las cuatro líneas que muestra.

Verifique el archivo usando

$ wc files.txt
  4  21 221 files.txt

$ sum files.txt
43924     1

En caso de duda, utilice la -Fopción (F mayúscula), pero no escapará de los metacaracteres en el archivo.txt.

Tenga en cuenta lo siguiente

$ cat files.txt
/Volumes/Documents - Part 1/July 2009/vacation.pdf
/Volumes/Documents - Part 1/July 2009/pie time!.jpg
/Volumes/Documents - Part 1/July 2009/Coding/Unix/sample.sh
/Volumes/Documents - Part 1/July 2009/trip-to-spain.pages
[z-a]

$ echo aaa | grep -vf files.txt
grep: Invalid range end

$ echo aaa | grep -Fvf files.txt
aaa

La -Fopción le dice a grep que sus patrones de búsqueda no contienen expresiones regulares y que debe tratarlos como texto sin formato.

información relacionada