In unserem Quellcode sind Fehlercodes verstreut. Mit grep ist es einfach, sie zu finden, aber ich hätte gerne eine Bash-Funktion find_code
, die ich ausführen kann (z. B. find_code ####
) und die folgende Ausgabe liefert:
/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 }
Folgendes habe ich derzeit:
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'
}
Probleme:
1) Dies liefert keine Zeilennummern
2) es stimmt nur mit .c-Quelldateien überein. Ich habe Probleme beim Abgleichen von .c-, .cs-, .cpp- und anderen Quelldateien. Wir verwenden jedoch C, um einfach zuzuordnen - oder: (die Zeichen, die grep vor jeder Codezeile an den Dateinamen anfügt), stimmen überein object->pointers
und bringen alles durcheinander .
sed
grep
awk
regular-expression
TravisThomas
quelle
quelle
MATCH="= ${1}"
. Ich habe auch hinzugefügt--include=*.c --include=*.cpp --include=*.java --include=*.cs
, um die Suche auf Quelldateien zu beschränken. Vielen Dank!Sie könnten verwenden
find
mit zwei-exec
s, die zweiten nur dann ausgeführt wird , wenn die erste erfolgreich ist, zum Beispiel nur bei der Suche.cpp
,.c
und.cs
Dateien:Der erste
grep
druckt also die Dateinamen, die Ihr Muster enthalten, und der zweite druckt die übereinstimmenden Zeilen + den nummerierten Kontext aus den jeweiligen Dateien.quelle