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.

Por ejemplo, ¿qué ocurre cuando necesitamos imprimir cada coincidencia junto con líneas adyacentes (cuando se utiliza -B, -A, o ambas)? El resultado sería el siguiente:

root@linuxito:~# grep server_name /usr/local/nginx/conf/nginx.conf -A 1
        server_name linuxito.com;
        return 301 http://www.linuxito.com$request_uri;
--
        server_name www.linuxito.com;
        server_tokens off;
--
        server_name linuxito.com;
        server_tokens off;
--
        server_name www.linuxito.com;
        server_tokens off;

Por supuesto head todavía sirve, aunque hay que ajustar la cantidad de líneas a mostrar:

root@linuxito:~# grep server_name /usr/local/nginx/conf/nginx.conf -A 1 | head -n 2
        server_name linuxito.com;
        return 301 http://www.linuxito.com$request_uri;

No obstante, grep cuenta con la opción -m que permite limitar la cantidad de resultados a mostrar (detener la búsqueda luego de -m coincidencias), lo cual además reduce el tiempo de búsqueda si se trata de archivos de gran tamaño:

root@linuxito:~# grep server_name /usr/local/nginx/conf/nginx.conf -A 1 -m 1
        server_name linuxito.com;
        return 301 http://www.linuxito.com$request_uri;

Esta opción simplifica el procesamiento pues si, en vez de la primera, queremos las primeras N coincidencias, utilizando head habrá que hacer las cuentas, mientras que con -m es tan simple como pasar N como parámetro:

root@linuxito:~# grep server_name /usr/local/nginx/conf/nginx.conf -A 1 | head -n 5
        server_name linuxito.com;
        return 301 http://www.linuxito.com$request_uri;
--
        server_name www.linuxito.com;
        server_tokens off;
root@linuxito:~# grep server_name /usr/local/nginx/conf/nginx.conf -A 1 -m 2
        server_name linuxito.com;
        return 301 http://www.linuxito.com$request_uri;
--
        server_name www.linuxito.com;
        server_tokens off;

En este caso, utilizando head la cantidad de líneas a filtrar es 5 (2 coincidencias de 2 líneas cada una, más la línea de separación), mientras que utilizando -m simplemente es 2.


Tal vez pueda interesarte


Compartí este artículo