A blog about data, information and Tech by Mario Alberich

        

grep: contexto de resultado y cantidad de ítems

Conjuntamente con diff, grep es la otra gran utilidad de referencia. En el momento de buscar textos simples o expresiones regulares, la familia de utilidades grep están en mi navaja suiza de utilidades. échale un vistazo al manual de esta utilidad.

Grep mostrando N filas antes y después de la coincidencia


En algunas ocasiones es necesario reconocer el contexto de una coincidencia. Para el caso del código fuente, el archivo donde se ha localizado la coincidencia puede no ser un indicador lo suficientemente detallado. Es por eso que greo proporciona las opcines -An y -Bn para mostrar las líneas posteries y anteriores a la coincidencia, respectivamente.

Así, el comando siguiente:

grep -B2 -A3 hola file.txt

Mostraría las líneas de file.txt que contienen el texto "hola", junto con las dos líneas anteriores y las tres posteriores. Vale la pena no abusar de las líneas de contexto, porque tienden a añadir ruido al resultado.  Encontrando la cantidad de líneas mínimas para ayudarnos a identificar el contexto, ganaremos tiempo. Más allá de ese mínimo, lo estaremos perdiendo.

Grep sólo hasta la enésima coincidencia


En ocasiones no es necesario buscar hasta los confines del mundo. Grep funciona muy bien pero en ciertos casos puede generar una cantidad de resultados que nos desbordan.  En otros casos simplemente necesitamos detectar una cantidad concreta de resultados, o incluso localizar exactamente la coincidencia que está en una posición determinada. Con grep, puedes conseguir ese resultado con la opción -m:

grep -m 3 hola file.txt

Esta llamada va a mostrar las tres primeras líneas que tienen coincidencias del texto hola dentro del archivo file.txt, lo que en el fondo vendría a ser el equivalente (pero mucho más óptimo porque nos evita procesar todo el archivo) que un grep + head:

grep hola file.txt | head -n 3

Sin embargo quizá en alguna ocasión sólo querremos localizar la coincidencia que se encuentra exactamente en la tercera posición. ¿Qué podemos hacer? Una primera solución es: combinar grep y tail de la siguiente manera:

grep -m 3 hola file.txt | tail -n 1

La primera instrucción devuelve los tres primeros resultados, y la segunda devuelve sólo la última fila del resultado anterior (por lo tanto el tercero).

© 2007 and beyond Mario Alberich, licensed under CC-BY-SA unless stated otherwise.