On Tuesday 18 August 2009 00:12:52 Carlos E. R. wrote:
El 2009-08-17 a las 22:49 +0200, csalinux escribió:
Hola, sé que esto es una chorrada para muchos de vosotros, el caso es que es la primera vez que tengo que hacer algo así y no se me ocurre cómo, aunque sé que se puede porque alguna vez lo habéis comentado en la lista.
Tengo 120 Mb de archivos log, de texto, y quiero localizar cuáles de ellos contienen una palabra determinada, sin tener que abrirlos uno por uno.
¿Alguien me puede proporcionar alguna orientación? Supongo que es un comando algo así como grep.
O zgrep si los logs están comprimidos. Por ejemplo:
zgrep -i PalaBrA /var/log/messages*gz | less -S
Por cierto, para buscar una palabra u otra se hace:
grep "Device:\|/dev/hda" /var/log/messages | less -S
Pero si quieres la función "Y", se hace encadenando:
grep "Device:" | grep "/dev/hda" /var/log/messages | less -S
Aunque hay algo mal ahí que no se lo que es, porque nunca termina y tengo que hacer ctrl-c
Otro comando interesante es este:
cat /etc/sysconfig/SuSEfirewall2 | egrep -v "^[[:space:]]*$|^#"
que sirve para extraer los valores de configuración de un fichero quitando los comentarios; es util para enviar esos ficheros por correo a una lista.
Más trucos de grep: grep -irE "(cadena_1|cadena_2|cadena_3|cadena_n)" /ruta/* En el ejemplo buscaría si existe alguna de las 4 cadenas, puede que te aparezcan otodas o ninguna. La "i" es para no distinguir entre mayúsucalas y minúsculas y la "r" es para ser recursivo. Si quieres buscar caracteres especiales, por ejemplo un "*", puedes usar: \ o bien fgrep o bien grep -F Por ejemplo: [rgriman@currotop ~]$ cat delete/ejemplo texto * EOF [rgriman@currotop ~]$ grep -F "*" delete/ejemplo * [rgriman@currotop ~]$ grep "\*" delete/ejemplo * [rgriman@currotop ~]$ fgrep "*" delete/ejemplo * [rgriman@currotop ~]$ La opción -w te permite buscar cadenas de texto enteras. Por ejemplo: grep -i sys /ruta/ encontrará cadenas de texto que contengan sys, como por ejemplo: system. Pero si lo qu equieres buscar es "sys" a secas, tendrás que usar -w: grep -iwr sys /ruta/ Si usas find y tienes muchos ficheros, el buffer se llenará y tendrás errores, es decir, no se corresponderá lo que te nuestra con la realidad. Por lo que puedes usar xargs: find /dir_con_miles_de_ficheros/ | xargs grep -opciones cadena_texto Cómo me gusta el grep :) Por cierto, grep viene de: "Get Regular Expression Print", IIRC.
Pero otra manera muy práctica es usar 'mc', midnight comander. Busca en los ficheros que le digas y luego puedes abrirlos para mirarlos (o editarlos), o marcar una lista que puedes usar para copiar, mover, borrar, etc.
También. Rafa -- "We cannot treat computers as Humans. Computers need love." rgriman@skype.com rgriman@jabberes.org -- Para dar de baja la suscripción, mande un mensaje a: opensuse-es+unsubscribe@opensuse.org Para obtener el resto de direcciones-comando, mande un mensaje a: opensuse-es+help@opensuse.org