¿Cómo encuentro todos los archivos que contienen un texto específico en Linux

linux text grep directory find


Estoy tratando de encontrar una manera de escanear todo mi sistema Linux para todos los archivos que contienen una cadena de texto específica.Sólo para aclarar,estoy buscando texto dentro del archivo,no en el nombre del archivo.

Cuando estaba buscando cómo hacer esto,me encontré con esta solución dos veces:

find / -type f -exec grep -H 'text-to-find-here' {} \;

Sin embargo,no funciona.Parece que muestra cada uno de los archivos del sistema.

¿Esto está cerca de la forma correcta de hacerlo? Si no,¿cómo debería hacerlo? Esta capacidad de encontrar cadenas de texto en los archivos sería extraordinariamente útil para algunos proyectos de programación que estoy haciendo.





Answer 1 rakib_


Haz lo siguiente:

grep -rnw '/path/to/somewhere/' -e 'pattern'
  • -r o -R es recursivo,
  • -n es el número de línea y
  • -w significa coincidir con toda la palabra.
  • -l (L minúscula) se puede agregar para dar solo el nombre del archivo de los archivos coincidentes.

Junto con estos, los --include , --include , --exclude --exclude-dir podrían usarse para una búsqueda eficiente:

  • Esto sólo buscará en aquellos archivos que tengan extensiones .c o .h:

    grep --include=\*.{c,h} -rnw '/path/to/somewhere/' -e "pattern"
    
  • Esto excluirá la búsqueda de todos los archivos que terminen con la extensión .o:

    grep --exclude=*.o -rnw '/path/to/somewhere/' -e "pattern"
    
  • Para los directorios es posible excluir uno o más directorios particulares a través --exclude-dir parámetro --exclude-dir . Por ejemplo, esto excluirá los directorios dir1 /, dir2 / y todos coincidirán con * .dst /:

    grep --exclude-dir={dir1,dir2,*.dst} -rnw '/path/to/somewhere/' -e "pattern"
    

Esto funciona muy bien para mí,para lograr casi el mismo propósito que el tuyo.

Para más opciones, consulte man grep .




Answer 2 fedorqui 'SO stop harming'


Puede usar grep -ilR :

grep -Ril "text-to-find-here" /
  • significa ignorar caso (opcional en su caso).
  • R significa recursivo.
  • l significa "mostrar el nombre del archivo, no el resultado en sí".
  • / significa comenzar desde la raíz de su máquina.



Answer 3 Stephan


Puedes usar ack . Es como grep para el código fuente. Puede escanear todo su sistema de archivos con él.

Sólo hazlo:

ack 'text-to-find-here'

En tu directorio raíz.

También puede usar expresiones regulares , especificar el tipo de archivo, etc.


UPDATE

Acabo de descubrir The Silver Searcher , que es como ack pero 3-5 veces más rápido e incluso ignora los patrones de un archivo .gitignore .




Answer 4 learner_19


Puedes usar:

grep -r "string to be searched"  /path/to/dir

La r significa recursivo, por lo que buscará en la ruta especificada y también en sus subdirectorios. Esto le dirá el nombre del archivo, así como imprimirá la línea en el archivo donde aparece la cadena.

O un comando similar al que está intentando (ejemplo:)para buscar en todos los archivos javascript (*.js):

find . -name '*.js' -exec grep -i 'string to search for' {} \; -print

Esto imprimirá las líneas de los archivos donde aparece el texto,pero no imprime el nombre del archivo.

Además de este comando, también podemos escribir esto: grep -rn "Cadena para buscar" / ruta / a / directorio / o / archivo -r: búsqueda recursiva n: se mostrará el número de línea para las coincidencias




Answer 5 A R


Puedes usar esto:

grep -inr "Text" folder/to/be/searched/