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.
sed
grep
awk
regular-expression
TravisThomas
sumber
sumber
MATCH="= ${1}"
. Saya juga menambahkan--include=*.c --include=*.cpp --include=*.java --include=*.cs
untuk membatasi pencarian ke file sumber. Terima kasih!Anda dapat menggunakan
find
dua-exec
s, yang kedua hanya akan dieksekusi jika yang pertama berhasil, mis. Hanya mencari di.cpp
,.c
dan.cs
file:jadi yang pertama
grep
mencetak nama file yang berisi pola Anda dan yang kedua akan mencetak baris yang sesuai + konteks, diberi nomor, dari masing-masing file.sumber