В нашем исходном коде разбросаны коды ошибок. Найти их легко с помощью grep, но мне бы хотелось, find_code
чтобы я выполнял функцию bash (например, find_code ####
), которая будет обеспечивать вывод в следующем виде:
/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 }
Вот что у меня сейчас:
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'
}
Проблемы:
1) Это не обеспечивает номера строк
2) он соответствует только исходным файлам .c. У меня проблемы с получением sed для соответствия .c, .cs, .cpp и другим исходным файлам. Тем не менее, мы используем C, поэтому простое сопоставление - или: (символы, которые grep добавляет к имени файла перед каждой строкой кода), совпадает object->pointers
и все портит.
sed
grep
awk
regular-expression
TravisThomas
источник
источник
MATCH="= ${1}"
. Я также добавил,--include=*.c --include=*.cpp --include=*.java --include=*.cs
чтобы ограничить поиск исходными файлами. Благодарность!Вы можете использовать
find
два-exec
с, второй один будет выполняться только тогда , когда первый из них является успешным, например , поиск только.cpp
,.c
и.cs
файлы:поэтому первый
grep
выводит имена файлов, которые содержат ваш шаблон, а второй - соответствующие строки и контекст, пронумерованный, из соответствующих файлов.источник