Nuestro código fuente tiene códigos de error dispersos por todas partes. Encontrarlos es fácil con grep, pero me gustaría una función bash find_code
que pueda ejecutar (por ejemplo find_code ####
), que proporcionará resultados a lo largo de estas líneas:
/home/user/path/to/source.c
85 imagine this is code
86 this is more code
87 {
88 nicely indented
89 errorCode = 1111
90 that's the line that matched!
91 ok this block is ending
92 }
93 }
Esto es lo que tengo actualmente:
find_code()
{
# "= " included to avoid matching unrelated number series
# SRCDIR is environment variable, parent dir of all of projects
FILENAME= grep -r "= ${1}" ${SRCDIR}
echo ${FILENAME}
grep -A5 -B5 -r "= ${1}" ${SRCDIR} | sed -e 's/.*\.c\[-:]//g'
}
Problemas:
1) Esto no proporciona números de línea
2) solo coincide con los archivos fuente .c. Tengo problemas para que sed coincida con .c, .cs, .cpp y otros archivos de origen. Sin embargo, usamos C, por lo que simplemente coincide - o: (los caracteres que grep agrega al nombre de archivo antes de cada línea de código) coincide object->pointers
y desordena todo.
sed
grep
awk
regular-expression
TravisThomas
fuente
fuente
MATCH="= ${1}"
. También agregué--include=*.c --include=*.cpp --include=*.java --include=*.cs
para limitar la búsqueda a los archivos de origen. ¡Gracias!Usted podría utilizar
find
con dos-exec
s, la segunda sólo se ejecutará si el primero tiene éxito, es decir, buscar sólo en.cpp
,.c
y.cs
archivos:así que el primero
grep
imprime los nombres de archivo que contienen su patrón y el segundo imprime las líneas coincidentes + contexto, numeradas, de los archivos respectivos.fuente