Grep es una excelente herramienta cuando tienes que buscar en el contenido de un archivo.
Por lo general, ejecuta grep en un solo archivo como este:
grep search_term filename
Grep es bastante versátil. Si desea buscar todos los archivos en un directorio con grep , úsalo así:
grep search_term *
Hay un problema con eso. Solo busca en todos los archivos del directorio actual. No buscará en los subdirectorios.
Puedes hacer búsqueda grep en todos los archivos y todos los subdirectorios del directorio actual usando -r
opción de búsqueda recursiva:
grep -r search_term .
También puede especificar la ruta del directorio si no se encuentra en el directorio donde desea realizar la búsqueda:
grep -r search_term directory_path
Ese fue un resumen rápido. Déjame mostrarte todo esto en detalle con ejemplos apropiados para que sea más fácil de entender.
Búsqueda grep en todos los archivos de un directorio
Aquí está la estructura de directorios que voy a usar en este ejemplo. Excepto el archivo empty.txt, todos los archivos contienen el término 'simple' en el que realizaré la búsqueda de grep.
[email protected]:~/scripts$ tree
.
├── dir1
│ └── new_script.sh
├── dir2
│ └── your_script.sh
├── dir3
│ ├── empty.txt
│ └── linked.txt -> ../../sample.txt
├── my_script.sh
└── your_script.sh
3 directories, 6 files
Para buscar la palabra 'simple' en todos los archivos de los directorios actuales, basta con utilizar comodines (*). El comodín en realidad sustituye con el nombre de todos los archivos y directorios en el directorio actual.
grep simple *
Esto buscará en todos los archivos de los directorios actuales, pero no entrará en los subdirectorios. Dado que no puede buscar directamente con grep en un directorio, mostrará el error "XYZ es un directorio" junto con los resultados de la búsqueda.
Si no está en el mismo directorio en el que desea actuar, puede especificar la ruta del directorio y terminar con /*
grep search_term directory_path/*
Básicamente, está utilizando el comodín para expandir todos los elementos (archivos y directorios) del directorio dado.
Ahora que lo sabe, veamos cómo puede realizar una búsqueda recursiva con grep para que también busque en los archivos de los subdirectorios.
Búsqueda recursiva Grep en todos los subdirectorios de un directorio
Grep proporciona un -r
opción para la búsqueda recursiva. Con esta opción, grep buscará en todos los archivos del directorio actual (o especificado) y también buscará en todos los archivos de todos los subdirectorios.
Aquí está la búsqueda recursiva que realicé en el ejemplo anterior para hacer una búsqueda grep en la carpeta actual:
grep -r simple .
Aquí está el resultado:
También hay un -R
opción para la búsqueda recursiva y funciona casi igual que el -r
opción.
grep -R simple .
Entonces, ¿cuál es la diferencia grep -r
y grep -R
? Solo uno, en realidad. El -R
es una búsqueda sin referencia, lo que significa que seguirá los enlaces simbólicos para ir al archivo original (que puede estar ubicado en alguna otra parte del sistema).
Eche un vistazo a la salida de -R
buscar en el mismo ejemplo:
¿Notaste que da un resultado de búsqueda adicional con el linked.txt
? que es básicamente un enlace simbólico y se omitió de la búsqueda grep con -r
opción?
Si no está en el directorio donde desea realizar la búsqueda recursiva, simplemente proporcione la ruta absoluta o relativa del directorio al comando grep:
grep -r search_term path_to_directory
Consejo adicional:Excluya un determinado directorio de la búsqueda recursiva de grep
Todo parece estar bien, pero ¿qué sucede si desea excluir un determinado directorio de la búsqueda recursiva? También hay una disposición para eso. Ya te lo dije, grep es un comando extremadamente versátil.
grep -r --exclude-dir=dir_name serach_term directory_path
No es eso. Puede excluir más de un subdirectorio de la búsqueda recursiva de la siguiente manera:
grep -r --exclude-dir={dir1,dir2} serach_term directory_path
Así es como se ven los directorios excluidos en nuestro ejemplo aquí:
Y sí, como lo demuestra el ejemplo anterior, la exclusión funciona tanto con -r
y -R
opciones recursivas.
Para resumir
Aquí hay un resumen rápido del uso de la búsqueda grep para múltiples archivos y directorios: