¿Cómo puedo usar grep para buscar una palabra dentro de una carpeta?

Resuelto kiki asked hace 14 años • 15 respuestas

En Windows, habría hecho una búsqueda para encontrar una palabra dentro de una carpeta. De manera similar, quiero saber si una palabra específica aparece dentro de un directorio que contiene muchos subdirectorios y archivos. Mis búsquedas de sintaxis grep muestran que debo especificar el nombre del archivo, es decir grep string filename, .

Ahora no sé el nombre del archivo, ¿qué hago? Un amigo sugirió hacerlo grep -nr string, pero no sé qué significa esto y no obtuve resultados (no hay respuesta hasta que emito un Ctrl+ C).

kiki avatar Nov 08 '10 13:11 kiki
Aceptado
grep -nr 'yourString*' .

El punto al final busca el directorio actual. Significado de cada parámetro:

-n            Show relative line number in the file
'yourString*' String for search, followed by a wildcard character
-r            Recursively search subdirectories listed
.             Directory for search (current directory)

grep -nr 'MobileAppSer*' . (Encontraría MobileAppServlet.javao MobileAppServlet.classo MobileAppServlet.txt; 'MobileAppASer*.*'es otra forma de hacer lo mismo).

Para verificar más parámetros use el comando man grep .

Manish Ranjan avatar Dec 17 '2012 04:12 Manish Ranjan
grep -nr string my_directory

Notas adicionales: esto satisface la sintaxis grep [options] string filenameporque en sistemas tipo Unix, un directorio es un tipo de archivo (existe un término "archivo normal" para referirse específicamente a entidades que se llaman simplemente "archivos" en Windows).

grep -nr stringlee el contenido a buscar desde la entrada estándar, es por eso que simplemente espera allí su entrada y deja de hacerlo cuando presiona ^C (también se detendría en ^D, que es la combinación de teclas para el final de -archivo).

usta avatar Nov 08 '2010 06:11 usta

GREP : Impresión/analizador/procesador/programa de expresión regular global.
Puede utilizar esto para buscar en el directorio actual.
Puede especificar -R para "recursivo", lo que significa que el programa busca en todas las subcarpetas, sus subcarpetas, las subcarpetas de sus subcarpetas, etc.

grep -R "your word" .

-nimprimirá el número de línea, donde coincidió en el archivo.
-ibuscará sin distinguir entre mayúsculas y minúsculas (mayúsculas/no mayúsculas).

grep -inR "your regex pattern" .
Stefan Steiger avatar Nov 08 '2010 07:11 Stefan Steiger

También hay:

find directory_name -type f -print0 | xargs -0 grep -li word

pero eso puede ser demasiado para un principiante.

findes un caminante/lista de directorios de propósito general, -type fsignifica "buscar archivos simples en lugar de directorios y canalizaciones con nombre y lo que sea", -print0significa "imprimirlos en la salida estándar usando caracteres nulos como delimitadores". La salida de findse envía a xargs -0y toma su entrada estándar en fragmentos (para evitar limitaciones de longitud de la línea de comando) usando caracteres nulos como separador de registros (en lugar de la nueva línea estándar) y luego se aplica grep -li worda cada conjunto de archivos. En grep, -lsignifica "enumerar los archivos que coinciden" y -isignifica "no distingue entre mayúsculas y minúsculas"; Por lo general, puedes combinar opciones de un solo carácter para que veas -limás a menudo que -l -i.

Si no los usa -print0, -0tendrá problemas con los nombres de archivos que contienen espacios, por lo que usarlos es un buen hábito.

mu is too short avatar Nov 08 '2010 07:11 mu is too short