16 Dec 2009

how to use grep

bash commands 129 Comments

grep is a unix command that allows you to search for a pattern in a list of files

You use grep in the following manner:
grep pattern file-name1 file-name2

Here is an example:
bash % grep ‘bizante news’ /usr/local/news/2009/*

/usr/local/news/2009/ - is the directory we are searching
* – the star in this case is saying that you want the search to be conducted
over ALL the files found in /usr/local/news/2009/

Notice that we put the words we are searching for together in single quotes. This is the way to search for a string with grep.

Use grep to search a single file
Search /etc/passwd for boo user:
$ grep boo /etc/passwd

You can force grep to ignore word case i.e match boo, Boo, BOO and all other combination with -i option:
$ grep -i “boo” /etc/passwd

Use grep recursively
You can search recursively i.e. read all files under each directory for a string “192.168.1.5″
$ grep -r “192.168.1.5″ /etc/

Use grep to search words only
When you search for boo, grep will match fooboo, boo123, etc. You can force grep to select only those lines containing matches that form whole words i.e. match only boo word:
$ grep -w “boo” /path/to/file

Use grep to search 2 different words
use egrep as follows:
$ egrep -w ‘word1|word2′ /path/to/file

Count line when words has been matched
grep can report the number of times that the pattern has been matched for each file using -c (count) option:
$ grep -c ‘word’ /path/to/file

Also note that you can use -n option, which causes grep to precede each line of output with the number of the line in the text file from which it was obtained:
$ grep -n ‘word’ /path/to/file

Grep invert match
You can use -v option to print inverts the match; that is, it matches only those lines that do not contain the given word. For example print all line that do not contain the word bar:
$ grep -v bar /path/to/file

UNIX / Linux pipes and grep command
grep command often used with pipes. For example print name of hard disk devices:
# dmesg | egrep ‘(s|h)d[a-z]‘

Display cpu model name:
# cat /proc/cpuinfo | grep -i ‘Model’

How do I list just the names of matching files?
Use the -l option to list file name whose contents mention main():
$ grep -l ‘main’ *.c

How to display output in colors:
$ grep –color searchstring /etc/passwd

Comments are closed.