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/
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 {} \;
😉
Joas, yo que siempre hacía
find directorio -exec grep -Hn cadena {} \;
cat *.py | egrep «CADENA»
lo weno de linux es que todo se puede hacer de mil formas diferentes… 🙂
Lo malo de la solución usando cat es que no es recursivo. Habría que usar un for in.
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.
¡Coño! muy interesante ese ack-grep Blaxter. Habrá que echarle un vistazo 😀
O gráficamente con kfind, mira q sois frikis –sin ofender ;)–
Cuando trabajas en serio con servidores el modo gráfico no es una opción.
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`
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).
Otro tip no muy conocido para grep
grep -A3 «texto» LOQUESEA
muestra las siguientes 3 lineas a la ocurrencia
Saludos
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.
Bueno.. para directorios (como .svn) la opción es –exclude-dir=.svn
«–exclude» a secas sólo es para ficheros.
¿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…
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.
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
Lo probe, es una verdadera maravilla, haber quien puede hacer eso, en un entorno gráfico?
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.
tienes que utilizar diagonal inversa
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.
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!
Siempre me ha gustado
find /ruta -type f | xargs grep «cadena»
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?
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*
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*
Este ack-grep es la repera!
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.
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
¿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.
Muy bueno simple y conciso graccias
Muy buenos aportes
Nada mejor que el post original para la tarea especifica, saludos!!!
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
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
Y si dentro de la cadena a buscar hay comillas dobles («)? gracias!!
Solo tienes que escapar los caracters, solo debes añadir una \ antes de cada » o cualquier caracter especial.
ejemplo:
«texto \»a busc\@r\» «
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!!!^^
Siempre me ha gustado esta:
find * -type f -exec grep -H –color=auto Cadena {} \;
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
Molt més fàcil. Baixeu del centre de programari de l’Ubuntu un programa que es diu «Recoll». Rutlla magníficament.
Esto parece Las 50 Sombras de grep…