Nosso código-fonte possui códigos de erro espalhados por toda parte. É fácil encontrá-los com o grep, mas eu gostaria de uma função bash find_code
que eu possa executar (por exemplo, find_code ####
) que fornecerá saída ao longo destas linhas:
/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 }
Aqui está o que eu tenho atualmente:
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) Isso não fornece números de linha
2) corresponde apenas aos arquivos de origem .c. Estou tendo problemas para obter o sed para combinar com .c, .cs, .cpp e outros arquivos de origem. No entanto, usamos C, portanto, simplesmente combinando - ou: (os caracteres que grep anexam ao nome do arquivo antes de cada linha de código) correspondem object->pointers
e atrapalham tudo.
MATCH="= ${1}"
. Também adicionei--include=*.c --include=*.cpp --include=*.java --include=*.cs
para limitar a pesquisa aos arquivos de origem. Obrigado!