I would like to find all declarations of functions that end with _DB in a file, and avoid perl and pipes.For example:prep_DB();init_DB(DB *database, char *params[]){  open_DB(database);}prep_DB() {  open_DB(database); // open}FILE * load_DB(const char * exppath, const char * expfname){}should only match the second line, and the next-to-last line.  The line prep_DB() { can be present or absent.Currently, the following command finds all function invocations:grep -E '.*_DB(.*)' fileHowever, I am having trouble negating the semicolon at the end.  The closest thread that came to explaining how it works is this; however, it seems that semicolon is a special character, because the advice there is not working.  How can I get around this limitation?
grep regular expression to avoid matching semicolon at end
grep;regular expression