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

  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

Deja un comentario