Buscar ficheros que contienen un texto determinado

Aquí os dejo algunas formas de buscar los ficheros que contienen un texto determinado en Linux.

En los ejemplos se busca en todos los archivos con extensión php, cambiar el *.php por la extensión que nos interese o por * si queremos buscar en todos los tipos de archivo.

Cambiar “búsqueda” por el texto que queremos buscar

grep “búsqueda” /directorio/*.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 “búsqueda” /directorio/

grep -rHi búsqueda *.php

find . -name "*.php" | xargs grep -il búsqueda

find . -name "*.php" -exec grep -il búsqueda {} \;

  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 {} \;
    find directorio -exec grep -Hn cadena {} \;

  2. 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.

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

  4. 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`

  5. 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).
  6. Otro tip no muy conocido para grep

    grep -A3 “texto” LOQUESEA

    muestra las siguientes 3 lineas a la ocurrencia
    Saludos

  7. 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.

  8. Bueno.. para directorios (como .svn) la opción es –exclude-dir=.svn

    “–exclude” a secas sólo es para ficheros.

  9. Algo más interesante, buscar y sustituir con grep:

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

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

  11. 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.

    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.

  12. 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*

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

    Espero que les sirva.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s