ซอร์สโค้ดของเรามีรหัสข้อผิดพลาดกระจายอยู่ทั่วไป การค้นหามันเป็นเรื่องง่ายด้วย grep แต่ฉันต้องการฟังก์ชั่นทุบตีfind_code
ที่ฉันสามารถดำเนินการ (เช่น. 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 เท่านั้น ฉันมีปัญหาในการติดตั้ง. c, .cs, .cpp และไฟล์ต้นฉบับอื่น ๆ อย่างไรก็ตามเราใช้ C ดังนั้นเพียงจับคู่ - หรือ: (อักขระที่ grep ต่อท้ายชื่อไฟล์ก่อนโค้ดแต่ละบรรทัด) จะจับคู่object->pointers
และทำให้ทุกอย่างยุ่ง
MATCH="= ${1}"
ดังนั้น ฉันยังเพิ่ม--include=*.c --include=*.cpp --include=*.java --include=*.cs
เพื่อ จำกัด การค้นหาไฟล์ต้นฉบับ ขอบคุณ!