Buscar archivos que contengan un texto en Linux

Para buscar archivos que contengan un cierto texto en Linux podemos utilizar el comando grep.

Su uso es muy sencillo. Basta con pasar como argumentos una cadena de texto a buscar (o una expresión regular) y el archivo o archivos en los que buscar.

grep “TODO” /home/zootropo/codigo/*.py

También podemos hacer que busque en todos los archivos contenidos en un cierto directorio, de forma recursiva, utilizando el flag -r:

grep -r “TODO” /home/zootropo/codigo/

Comentarios
  1. y que tal:

    find / -name “*.py” -exec grep -il CADENA {} \;
    find / -type f -exec grep -il CADENA {} \;
    find . -newer ARCHIVO.txt -exec grep -il CADENA {} \;

    ;)

    Responder

  2. Joas, yo que siempre hacía

    find directorio -exec grep -Hn cadena {} \;

    Responder

  3. cat *.py | egrep “CADENA”
    lo weno de linux es que todo se puede hacer de mil formas diferentes… :)

    Responder

  4. Lo malo de la solución usando cat es que no es recursivo. Habría que usar un for in.

    Responder

  5. ack-grep es vuestro amigo. Es similar a grep, pero te filtra automáticamente muchos ficheros (tipo .svn/*, .git/* foo*~ & cia) y además la salida es con coloritos :D e información de la línea.

    Responder

  6. ¡Coño! muy interesante ese ack-grep Blaxter. Habrá que echarle un vistazo :D

    Responder

  7. O gráficamente con kfind, mira q sois frikis –sin ofender ;)–

    Responder

  8. felinux

    yo lo utilizo mucho con la opción -l, que saca sólo el nombre de los ficheros, y con ello abro el editor vi de todos los archivos que encuentro:

    vi `grep TODO *.pl`

    Responder

  9. MiKeLEtE

    También sería interesante usar la opción -i para que no distinga entre mayúsculas y minúsculas (en el caso de que no interese, claro).

    Responder

  10. Manuel

    Otro tip no muy conocido para grep

    grep -A3 “texto” LOQUESEA

    muestra las siguientes 3 lineas a la ocurrencia
    Saludos

    Responder

  11. Ferk

    Sobre lo de ack-grep.. eso se peude hacer con grep también.
    Para excluir ficheros, por ejemplo: grep –exclude=.* –exclude=*~ –exclude=#*#
    Se pueden poner varios exclude a la vez.

    Y para ponerle colores: grep –color

    Yo tengo un alias de grep configurado con varias opciones predefinidas.

    Responder

  12. Ferk

    Bueno.. para directorios (como .svn) la opción es –exclude-dir=.svn
    “–exclude” a secas sólo es para ficheros.

    Responder

  13. ¿Alguien ha tirado alguna alguna vez una máquina entera haciendo un grep -r desde la raiz? (/). No sé si aún pasa, pero a mí me ocurrió varias veces en el pasado…

    Responder

  14. Algo más interesante, buscar y sustituir con grep:
    grep -rlZ ‘textoareemplazar’ /ruta/ | xargs -r0 perl -pi -e ‘s/textoareemplazar/textonuevo/g’

    Esta intrucción ayuda bastante para servidores con mucha “morralla historica” en la que queramos cambiar algo a nivel general

    Responder

    • Lo probe, es una verdadera maravilla, haber quien puede hacer eso, en un entorno gráfico?

      Responder

    • Lester Herrera

      grep -rlZ ‘textoareemplazar’ /ruta/ | xargs -r0 perl -pi -e ‘s/textoareemplazar/textonuevo/g’

      Me funciona bien para algunos casos; pero intento usarla con una cadena que contiene caracteres especiales como @ (arroba) no me funcina.

      Responder

      • sandro

        tienes que utilizar diagonal inversa

        Responder

  15. andres camilo

    Hola chicos, tengo una tarea pendiente y consiste en imprimir en un fichero las lineas que contengan un numero de telefono y el caso es que cada son 600 ficheros de texto y cada uno ocupa unos 5 MB por lo cual el juntarlos y descargarlos para usar una herramienta como el textpad es algo super lento. Queria saber como puedo hacerlo? tengo una distro de fedora core.

    Nota el ejemplo puesto en este foro es muy paresido a lo que necesito.

    Gracias por vuestra ayuda.

    Responder

    • guille

      Calculo que ya lo habras podido resolver, pero respondo por si a alguien le resulta util:
      Segun te he entendido tienes que buscar en un archivo cualquier linea que tenga un número y pasarlo a otro archivo, es muy sencillo:

      cat archivo_origen | grep [0,1,2,3,4,5,6,7,8,9] >> archivo_destino

      Lo que hace es buscar cualquier coincidencia con los caracteres 0, 1, 2… etc y guardarlo.

      Saludos!

      Responder

  16. th0mas

    Siempre me ha gustado

    find /ruta -type f | xargs grep “cadena”

    Responder

  17. Daniel gaitan

    todos los que son de tipo similar a este

    find /ruta -type f | xargs grep “cadena”
    find /ruta -iname “*” | xargs grep “cadena”

    funcionan cuando la ruta es un directorio como tal, pero cuando esta en la raiz no funciona (por lo menos a mi no) ¿POR QUE CARAJOS OCURRE ESTO?

    Responder

    • Eslako

      Hola Daniel,

      aplica este comando si quieres buscar dentro de un archivo

      grep “TEXTO” ARCHIVO

      si quieres buscar en la raiz utliza este otro

      ls /TEXTO A BUSCAR*

      Responder

  18. Eslako

    Hola Daniel,

    aplica este comando si quieres buscar dentro de un archivo

    grep “TEXTO” ARCHIVO

    si quieres buscar en la raiz utliza este otro

    ls /TEXTO A BUSCAR*

    Responder

  19. Lunix

    Este ack-grep es la repera!

    Responder

  20. emilio rey

    Para buscar dentro de un archivo de forma que la búsqueda sea para varios argumentos(0,1,2,3,4) y la salida quede en otro archivo lo que se hace es lo siguiente

    cat archivo_origen | grep -e 0 -e 1 -e 2 -e 3 -e 4 >> archivo_destino

    Espero que les sirva.

    Responder

    • morgan

      como puedo hacer para buscar dentro de un archivo que contiene numeros todas las cifras que terminen en x numero. por ejemplo si yo tengo 123456789 y quiero todos los resgistros que terminan en 789 como hago yo estoy usando grep pero no se como hacer que me de los resgistros que terninan con ese numero.
      Saludos y muchas gracias

      Responder

  21. Fran

    ¿Quien puede ayudar, a buscar un Documento de texto? que estaba escribiendo y al copiar para pasarlo al correo ha desaparecido¿ donde puede estar? Gracias.

    Responder

  22. Muy bueno simple y conciso graccias

    Responder

  23. jhon

    Muy buenos aportes

    Responder

  24. Sarvelio

    Nada mejor que el post original para la tarea especifica, saludos!!!

    Responder

  25. marissa

    buen día tengo dos archivos.txt uno contiene las palabras que quiero buscar y otro el lugar donde va a buscar las palabras, tengo duda de como buscar las palabras y contar cuantas veces se repitió.

    saludos

    Responder

  26. Michel C.

    Estimados, hay algo que no me sale.
    aplico esta linea, la idea es que salga valor 0 y no mayor a eso. pero no sucede, mi idea es solo procesar archivo con extension .biar, pero no me arroja el resultado que quiero porque no pesca el punto.. se agradece cualquier tiron de orejas..

    comando:
    grep -ic “.biar” /home/tigger/Deploys/archivo.log
    resultado:
    2

    Archivo.log
    Estatus: Sorry, you do not have the right to ‘Edit objects’ (ID: 6) for ‘BDWEBRS’ (ID: 2006). Please contact your administrator if you require this right.
    Estatus:
    Estatus: An error occurred at the server during security batch commit:
    Estatus: Request 92 of type 38 failed with server error : You do not have sufficient rights to make the requested security changes.
    Estatus: Request 91 of type 38 failed with server error : You do not have sufficient rights to make the requested security changes.
    Estatus: Request 86 of type 36 failed with server error : You do not have sufficient rights to make the requested security changes.
    Estatus: Request 87 of type 36 failed with server error : You do not have sufficient rights to make the requested security changes.
    Estatus: Request 89 of type 38 failed with server error : You do not have sufficient rights to make the requested security changes.
    Estatus: Request 90 of type 38 failed with server error : You do not have sufficient rights to make the requested security changes.
    Estatus: Request 88 of type 38 failed with server error : You do not have sufficient rights to make the requested security changes.
    Estatus:
    SVN: http://subversion.ny.xxx.com/svn/repos/WEBRS/Source_WebRS_MIS/Source_MIS/EMEA/Branch/UAT/WEBRS-2481/Txt_source/SQL/BO/Biar_malo.zip

    Responder

  27. iris

    Y si dentro de la cadena a buscar hay comillas dobles (“)? gracias!!

    Responder

  28. Nua

    Hola!!

    He estado usando mucho
    grep -r “TODO” /home/zootropo/codigo/

    hasta que un día por alguna razón desconocida dejó de funcionar. Ahora me saca por pantalla “warning: ./dir/dir/dir/root.system: recursive directory loop” varias veces hasta que detengo el proceso.

    Alguna idea de porque me empezó a ocurrir esto?

    Muchas gracias!!!^^

    Responder

  29. cheperobert

    Siempre me ha gustado esta:

    find * -type f -exec grep -H –color=auto Cadena {} \;

    Responder

  30. Javier Gutierrez

    hola estoy haciendo unos ejercicios para sistemas que consiste en buscar una cadena de texto que se encuentre dentro de los archivos y que aparescan los archivos que tienen la cadena de texto

    Responder

  31. Ragueneau

    Molt més fàcil. Baixeu del centre de programari de l’Ubuntu un programa que es diu “Recoll”. Rutlla magníficament.

    Responder

Deja un comentario