Al buscar código para cadenas, constantemente me encuentro con el problema de que obtengo resultados sin sentido y sin contexto. Por ejemplo, si una llamada de función se divide en 3 líneas, y busco el nombre de un parámetro, obtengo el parámetro en una línea por sí mismo y no el nombre de la función.¿Cómo puedo grep para líneas de código enteras, posiblemente envueltas?
Por ejemplo, en un archivo que contiene
...
someFunctionCall ("test",
MY_CONSTANT,
(some *really) - long/expression);
grepping para MY_CONSTANT devolvería una línea que se veía así:
MY_CONSTANT,
Del mismo modo, en un bloque de comentarios:
/////////////////////////////////////////
// FIXMESOON, do..while is the wrong choice here, because
// it makes the wrong thing happen
/////////////////////////////////////////
Grepping para FIXMESOON da la muy frustrante respuesta:
// FIXMESOON, do..while is the wrong choice here, because
Cuando hay miles de visitas, los resultados de una sola línea son un poco insignificantes. Lo que me gustaría hacer es que grep esté al tanto de los puntos de inicio y fin de las líneas de código fuente, algo tan simple como tenerlo en cuenta ";" como el separador de línea sería un buen comienzo.
Puntos de bonificación si puede hacer que devuelva todo el bloque de comentarios si el hit está dentro de un comentario.
Sé que no puedes hacer esto con grep solo. También estoy al tanto de la opción de que grep devuelva una cierta cantidad de líneas de contexto. ¿Alguna sugerencia sobre cómo lograr en Linux? FYI mis idiomas preferidos son C y Perl.
Estoy seguro de que podría escribir algo, pero sé que alguien ya debe haber hecho esto.
Gracias!
No sé, pero es una buena pregunta! – mpen
en lugar de una buena solución, siempre puede usar grep '' -C n' para 'n' líneas de contexto –