Kode sumber kami memiliki kode kesalahan yang tersebar di seluruh. Menemukannya mudah dengan grep, tapi saya ingin fungsi bash find_code
yang dapat saya jalankan (mis. find_code ####
) Yang akan memberikan output di sepanjang baris ini:
/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 }
Inilah yang saya miliki saat ini:
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'
}
Masalah:
1) Ini tidak memberikan nomor baris
2) hanya cocok dengan file sumber .c. Saya mengalami masalah untuk menyesuaikan data dengan .c, .cs, .cpp, dan file sumber lainnya. Kami menggunakan C, jadi hanya mencocokkan - atau: (karakter yang grep ditambahkan ke nama file sebelum setiap baris kode) cocok object->pointers
dan mengacaukan semuanya.
MATCH="= ${1}"
. Saya juga menambahkan--include=*.c --include=*.cpp --include=*.java --include=*.cs
untuk membatasi pencarian ke file sumber. Terima kasih!