grep

  • En los sistemas de la familia Unix, típicamente utilizamos la herramienta find para buscar archivos por nombre, por fecha de modificación, o tipo, tamaño, etc. Sin embargo puede ser necesario buscar archivos por contenido. Por ejemplo, buscar archivos que incluyan cierta palabra clave dentro de su texto. A tal fin es posible recurrir a grep para realizar búsquedas de texto en archivos (lo que se conoce como full-text search).

  • Los comentarios en archivos de configuración son excepcionales, en el sentido que documentan el significado y funcionamiento de cada una de las variables. Esto está muy bien al momento de configurar un servicio, pero ¿qué pasa si deseamos comprobar qué valores están siendo aplicados sobre las variables de un servicio o demonio, rápidamente y sin necesidad de desplazarse por cientos de líneas de comentarios?

    grep al rescate.

  • Supongamos que deseamos buscar una cadena en un archivo de texto, pero sólo nos interesa quedarnos con el primer resultado de la búsqueda:

    root@linuxito:~# grep server_name /usr/local/nginx/conf/nginx.conf
            server_name linuxito.com;
            server_name www.linuxito.com;
            server_name linuxito.com;
            server_name www.linuxito.com;
    

    Probablemente nos veamos tentados a utilizar head:

    root@linuxito:~# grep server_name /usr/local/nginx/conf/nginx.conf | head -n 1
            server_name linuxito.com;
    

    Sin embargo, grep posee una opción para controlar qué cantidad de resultados deseamos visualizar.

  • Cada vez que ejecutamos un comando similar al siguiente, para ver el estado de un grupo de procesos, aparece el propio proceso grep estorbando en la salida:

    root@debian:~# ps aux | grep "apache"
    root      2507  0.0  0.0  82304  5584 ?        Ss   dic01   0:12 /usr/sbin/apache2 -k start
    root     27017  0.0  0.0   7860   876 pts/0    S+   12:58   0:00 grep apache
    www-data 29399  0.0  0.0  81668  3080 ?        S    dic04   0:00 /usr/sbin/apache2 -k start
    www-data 29450  0.0  0.1 451232  8648 ?        Sl   dic04   0:55 /usr/sbin/apache2 -k start
    www-data 29451  0.0  0.1 385724  8476 ?        Sl   dic04   0:54 /usr/sbin/apache2 -k start
    

    Este artículo muestra un pequeño truco con expresiones regulares para hacerlo desaparecer.