Our source code has error codes scattered throughout. Finding them is easy with grep, but I'd like a bash function find_code that I can execute (eg. find_code ####) which will provide output along these lines:/home/user/path/to/source.c85     imagine this is code86     this is more code87     {88         nicely indented89         errorCode = 111190         that's the line that matched!91         ok this block is ending92     }93 }Here is what I have currently: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'}Problems: 1) This doesn't provide line numbers 2) it only matches .c source files. I'm having trouble getting sed to match .c, .cs, .cpp, and other source files. We do use C, though, so simply matching - or : (the characters that grep appends to the filename before each line of code) matches object->pointers and messes everything up.
grep: display filename once, then display context with line numbers
sed;grep;awk;regular expression
I would change a few things about.find_code() {     # assign all arguments (not just the first ${1}) to MATCH    # so find_code can be used with multiple arguments:    #    find_code errorCode    #    find_code = 1111    #    find_code errorCode = 1111    MATCH=$@     # For each file that has a match in it (note I use `-l` to get just the file name    # that matches, and not the display of the matching part) I.e we get an output of:    #    #       srcdir/matching_file.c    # NOT:    #       srcdir/matching_file.c:       errorCode = 1111    #    grep -lr $MATCH ${SRCDIR} | while read file     do         # echo the filename        echo ${file}        # and grep the match in that file (this time using `-h` to suppress the         # display of the filename that actually matched, and `-n` to display the         # line numbers)        grep -nh -A5 -B5 $MATCH ${file}    done }