Basic Syntax:
>>
grep [options] [pattern] [files to be searched]
eg. >>
grep -r Hello .
(Grep the current directory for the string "Hello". Make the search recursive i.e. search within sub-directories too)
grep searches in all files. Even binary files. This can sometimes be irritating, since results from binary files are seldom useful. Pass a "-I" ignore binary files. (grep examines the first few of the file to determine whether the file is binary or ASCII. extensions are NOT used)
Also, you may want to ignore case. Use "-i"
By default, the format of printing the output is
"
Sometimes it might be useful to alter this pattern.
Use
1) "-n" to display the line number in the file where a match was found
2) "-o" to show only the matching text and NOT the entire line.
3) "-C [num of lines]
4) "--color" to show the matching pattern in color.
Also, sometimes you might be interested in only the number of matching lines. use "-c".
Another VERY useful option is "invert-match" (i.e. select non-matching lines)
use "-v".
eg. >>
grep -v -e "^#" my.c
(i.e. select all lines that do NOT start with a #)
grep can take only basic regular expressions. Use "-e" to pass an expression which uses the extended regex format.
These are pretty much the frequently used options. man grep for more options.
Some Grep usage scenarios:
grep alongwith piping makes a great combo!
you can say something like
>>
find . -name "*.c" | xargs grep -in Hello
to search only C files within a directory.
Or you can say
>>
find . -name "*.c" | grep hello
| grep -v not_welcometo find a filename containing the string "hello" in it but NOT "not_welcome" !!
NOTES:
1) I purposely havn't talked about regular expressions. They are worthwhile to learn since they are required everywhere, not only for grep. With a good knowledge of regular expressions, grep is awesomely powerful!
2) grep is slow. Understandable. since it is content search!
3) Are more examples required? Let me know!
PS:
So, grep is used for search. But, what about search and replace?
Well, use "sed" for that. sed is good! (sed has saved me loads and loads of time. It is good to know atleast basic sed)
A nice tutorial can be found here.
EOF