¿Cómo puedo usar grep para buscar una palabra dentro de una carpeta?
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).
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.java
o MobileAppServlet.class
o MobileAppServlet.txt
; 'MobileAppASer*.*'
es otra forma de hacer lo mismo).
Para verificar más parámetros use el comando man grep .
grep -nr string my_directory
Notas adicionales: esto satisface la sintaxis grep [options] string filename
porque 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 string
lee 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).
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" .
-n
imprimirá el número de línea, donde coincidió en el archivo.
-i
buscará sin distinguir entre mayúsculas y minúsculas (mayúsculas/no mayúsculas).
grep -inR "your regex pattern" .
También hay:
find directory_name -type f -print0 | xargs -0 grep -li word
pero eso puede ser demasiado para un principiante.
find
es un caminante/lista de directorios de propósito general, -type f
significa "buscar archivos simples en lugar de directorios y canalizaciones con nombre y lo que sea", -print0
significa "imprimirlos en la salida estándar usando caracteres nulos como delimitadores". La salida de find
se envía a xargs -0
y 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 word
a cada conjunto de archivos. En grep
, -l
significa "enumerar los archivos que coinciden" y -i
significa "no distingue entre mayúsculas y minúsculas"; Por lo general, puedes combinar opciones de un solo carácter para que veas -li
más a menudo que -l -i
.
Si no los usa -print0
, -0
tendrá problemas con los nombres de archivos que contienen espacios, por lo que usarlos es un buen hábito.