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).