Using find and grep to search files
By Eric Downing. Filed in Scripting, Shell, Utilities |I have been searching through source code and files for years. And I used to use find with a few arguments to get what I was looking for.
find . -exec grep {} ; -print
I used the -print after the exec arguments to show the file only when the grep succeeded. This worked but was a bit to type each time I used it. So I came up with a little script that would help me to search for the an argument and even allow a case insensitive search as well.
#!/bin/sh if [ $# -lt 1 ]; then echo 1>&2 Usage: $0 "" exit 127 fi icase= search= while [ $# -ge 1 ]; do case $1 in -i) icase=$1;; *) search=$1 ;; esac shift done find . -type f -print0 | xargs -0 grep $icase $search
The script takes at least one argument and excepts a ‘-i’ argument to make grep use a case insensitive search. This will print the file name and the line that matches the search term. It can be easily adapted to show the count of matched patterns (‘-c’) or the line number (‘-n’).