Mã nguồn của chúng tôi có mã lỗi nằm rải rác trong suốt. Tìm kiếm chúng thật dễ dàng với grep, nhưng tôi muốn một hàm bash find_code
mà tôi có thể thực thi (ví dụ find_code ####
:) sẽ cung cấp đầu ra dọc theo các dòng này:
/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 }
Đây là những gì tôi có hiện tại:
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'
}
Các vấn đề:
1) Điều này không cung cấp số dòng
2) nó chỉ phù hợp với các tập tin nguồn .c. Tôi gặp sự cố khi nhận sed để khớp với các tệp .c, .cs, .cpp và các tệp nguồn khác. Mặc dù vậy, chúng tôi sử dụng C, do đó, chỉ cần khớp - hoặc: (các ký tự grep gắn vào tên tệp trước mỗi dòng mã) khớp object->pointers
và làm rối tung mọi thứ.
MATCH="= ${1}"
. Tôi cũng đã thêm--include=*.c --include=*.cpp --include=*.java --include=*.cs
để giới hạn tìm kiếm vào các tập tin nguồn. Cảm ơn!