Nasz kod źródłowy ma rozrzucone kody błędów. Znalezienie ich jest łatwe dzięki grep, ale chciałbym wykonać funkcję bash find_code
, którą mogę wykonać (np. find_code ####
), Która zapewni dane wyjściowe wzdłuż tych linii:
/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 }
Oto co mam obecnie:
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'
}
Problemy:
1) To nie podaje numerów linii
2) pasuje tylko do plików źródłowych .c. Mam problem z dopasowaniem sed do plików .c, .cs, .cpp i innych plików źródłowych. Używamy jednak C, więc po prostu dopasowujemy - lub: (znaki, które grep dołącza do nazwy pliku przed każdą linią kodu) dopasowuje object->pointers
i wszystko psuje.
sed
grep
awk
regular-expression
TravisThomas
źródło
źródło
MATCH="= ${1}"
. Dodałem również,--include=*.c --include=*.cpp --include=*.java --include=*.cs
aby ograniczyć wyszukiwanie do plików źródłowych. Dzięki!Można korzystać
find
z dwóch-exec
s, drugi będzie wykonywana tylko wtedy, gdy pierwszy z nich jest skuteczne, na przykład tylko w poszukiwaniu.cpp
,.c
a.cs
pliki:więc pierwsza
grep
drukuje nazwy plików, które zawierają twój wzór, a druga drukuje pasujące linie + kontekst, numerowany, z odpowiednich plików.źródło