GNU/Linux >> Tutoriales Linux >  >> Linux

Grep:¿Memoria agotada?

Estaba haciendo una búsqueda muy simple:

grep -R Milledgeville ~/Documents

Y después de un tiempo apareció este error:

grep: memory exhausted

¿Cómo puedo evitar esto?

Tengo 10 GB de RAM en mi sistema y pocas aplicaciones ejecutándose, por lo que estoy realmente sorprendido de que un simple grep se quede sin memoria. ~/Documents tiene unos 100 GB y contiene todo tipo de archivos.

grep -RI Puede que no tenga este problema, pero también quiero buscar en archivos binarios.

Respuesta aceptada:

Dos problemas potenciales:

  • grep -R (excepto para el grep de GNU modificado encontrado en OS/X 10.8 y superior) sigue los enlaces simbólicos, por lo que incluso si solo hay 100 GB de archivos en ~/Documents , aún podría haber un enlace simbólico a / por ejemplo, y terminará escaneando todo el sistema de archivos, incluidos archivos como /dev/zero . Utilice grep -r con GNU grep más nuevo , o use la sintaxis estándar:

    find ~/Documents -type f -exec grep Milledgeville /dev/null {} +
    

    (Sin embargo, tenga en cuenta que el estado de salida no reflejará el hecho de que el patrón coincida o no).

  • grep encuentra las líneas que coinciden con el patrón. Para eso, tiene que cargar una línea a la vez en la memoria. GNU grep a diferencia de muchos otros grep Las implementaciones no tienen un límite en el tamaño de las líneas que lee y admite la búsqueda en archivos binarios. Por lo tanto, si tiene un archivo con una línea muy grande (es decir, con dos caracteres de nueva línea muy separados), más grande que la memoria disponible, fallará.

    Eso normalmente sucedería con un archivo disperso. Puedes reproducirlo con:

    truncate -s200G some-file
    grep foo some-file
    

    Ese es difícil de solucionar. Podrías hacerlo como (todavía con GNU grep ):

    buscar ~/Documentos -type f -exec sh -c 'for i do tr -s "
    
Linux
  1. Archivos .o frente a archivos .a

  2. wc archivos comprimidos con gzip?

  3. ¿Cómo buscar contenido de múltiples archivos pdf?

  4. Comando de Linux:¿Cómo 'buscar' solo archivos de texto?

  5. Encontrar archivos ejecutables usando ls y grep

Comando Grep en Linux (Buscar texto en archivos)

Cómo realizar una búsqueda de patrones en archivos usando Grep

Encuentra texto en archivos en Linux usando grep

¿Cómo buscar en archivos específicos que coincidan con un patrón?

¿Cómo encontrar múltiples cadenas en archivos?

Cómo realizar una búsqueda Grep en todos los archivos y en todos los directorios