Notre code source a des codes d'erreur dispersés partout. Les trouver est facile avec grep, mais j'aimerais une fonction bash find_code
que je peux exécuter (par exemple. find_code ####
) Qui fournira une sortie dans ce sens:
/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 }
Voici ce que j'ai actuellement:
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'
}
Problèmes:
1) Cela ne fournit pas de numéros de ligne
2) il ne correspond qu'aux fichiers source .c. J'ai du mal à faire correspondre sed avec .c, .cs, .cpp et d'autres fichiers sources. Nous utilisons cependant C, donc il suffit de faire correspondre - ou: (les caractères que grep ajoute au nom de fichier avant chaque ligne de code) correspond object->pointers
et gâche tout.
sed
grep
awk
regular-expression
TravisThomas
la source
la source
MATCH="= ${1}"
. J'ai également ajouté--include=*.c --include=*.cpp --include=*.java --include=*.cs
pour limiter la recherche aux fichiers source. Merci!Vous pouvez utiliser
find
avec deux-exec
s, la seconde ne sera exécutée que si le premier est réussi, par exemple la recherche uniquement.cpp
,.c
et.cs
fichiers:de sorte que le premier
grep
imprime les noms de fichiers qui contiennent votre modèle et le second imprimera les lignes correspondantes + le contexte, numérotés, à partir des fichiers respectifs.la source