Ejecuto diff
con la opción -p
, por lo que la salida incluirá el nombre de la función donde ocurrió cada cambio. ¿Hay una opción análoga para grep
? Si no, ¿qué otro comando podría usar en su lugar?¿Qué comando grep incluirá el nombre de la función actual en su salida?
En lugar de -B
para mostrar un número fijo de líneas de contexto que preceden inmediatamente a una coincidencia, me gustaría que la coincidencia sea precedida por una sola línea con la firma de función más reciente, sin embargo, muchas líneas atrás estaban en la archivo. Si la opción Busco eran -p
, la producción podría tener este aspecto, por ejemplo:
$ cat foo.c int func1(int x, int y) { return x + y; } int func2(int x, int y, int z) { int tmp = x + y; tmp *= z; return tmp; } $ grep -p -n -e 'return' foo.c 1-int func1(int x, int y) 3: return x + y; -- 5-int func2(int x, int y, int z) 9: return tmp;
Podría grep para la firma de su función '|'. Habrá un poco de ruido extra pero obtendrás lo que quieres. –
Por lo que estoy buscando, la expresión regular para que coincida con la firma de una función no debería ser mejor que la que utiliza 'diff', incluso'^\ w. * \ ('Parece hacer un buen trabajo. Pero aplicarlo sin limitarlo al contexto del partido "real" produce * mucho * ruido adicional - Tengo más de 1300 coincidencias en un solo subdirectorio de mi proyecto actual. –
Es una característica que estoy pensando para ack 2.x. –