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/

41 comentarios en «Buscar archivos que contengan un texto en Linux»

  1. 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 😀 e información de la línea.

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

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

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

    1. Pues la verdad que no, lo acabo de hacer y no ha pasado nada. 😀 Solo algunos errores de lectura en la carpeta /sys/ pero el ordenador responde.

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

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

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

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

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

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

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

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

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

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

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

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

    1. Solo tienes que escapar los caracters, solo debes añadir una \ antes de cada » o cualquier caracter especial.

      ejemplo:

      «texto \»a busc\@r\» «

  13. 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!!!^^

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

Deja un comentario

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.