Thursday, December 27, 2012

Learning GREP

GREP command is one of the most frequently used UNIX command stands for "Global Regular Expression Print” .GREP command in Unix operating system e.g. Linux, Solaris, BSD, Ubuntu or IBM AIX is used to search files with matching patterns, by using grep command in Unix you can search a file which contains a particular word or particular pattern.
 
Example 1
Finding relevant word and exclusion of irrelevant word is the most feature of grep command. Most of the time I look for Exception and Errors in log files and some time I know certain Exception I can ignore so I use grep -v option to exclude those Exceptions.
 
grep Exception logfile.txt | grep –v ERROR

This grep command example will search for word "Exception" in logfile.txt and print them but since we have piped out of first grep command to second grep command which will exclude all lines which match world "ERROR". To make this grep example more concrete let's see another example, here we have a file which contains three lines as shown below:
$ cat example.txt
UNIX operating system
UNIX and Linux operating system
Linux operating system

Now we want to search all lines in file example.txt which contains word UNIX but same time doesn't contain world Linux.
$ grep UNIX example.txt
UNIX operating system
UNIX and Linux operating system

Now to exclude all lines which contains Linux we will apply another grep command in this output with option -v to exclude matching word as shown in below grep command.
$ grep UNIX example.txt | grep -v Linux
UNIX operating system
Example 2

If you want to count of a particular word in log file you can use grep -c option to count the word. Below example of command will print how many times word "Error" has appeared in logfile.txt.
 
grep -c "Error" logfile.txt

If we apply this grep command on our example file to find how many lines contains word e.g. UNIX has occurred in the file :
$ grep -c UNIX example.txt
2
 
Example 3
 
Sometime we are not just interested on matching line but also on lines around matching lines particularly useful to see what happens before any Error or Exception. grep --context option allows us to print lines around matching pattern. Below example of grep command in UNIX will print 6 lines around matching line of word "successful" in logfile.txt
 
grep --context=6 successful logfile.txt
Show additional six lines after matching very useful to see what is around and to print whole message if it splits around multiple lines. You can also use command line option "C" instead of "--context" for example
 
grep -C 2 'hello'
Prints two lines of context around each matching line.
 
Example 4
 
egrep stands for extended grep and it is more powerful than grep command in Unix and allows more regular exception like you can use "|" option to search for either Error or Exception by executing just one command.
 
egrep 'Error|Exception' logfile.txt
 
Example 5
 
If you want to do case insensitive search than use -i option from grep command in UNIX. Grep -i will find occurrence of both Error, error and ERROR and quite useful to display any sort of Error from log file.
 
grep -i Error logfile
 
Example 6
 
Use grep -w command in UNIX if you find whole word instead of just pattern.
grep -w ERROR logfile
 Above grep command in UNIX searches only for instances of 'ERROR' that are entire words; it does not match `SysERROR'.
 For more control, use `\<' and `\>' to match the start and end of words. For example:
 grep 'ERROR>' *
 Searches only for words ending in 'ERROR', so it matches the word `SysERROR'.
 
Example 7
 
Another useful grep command line option is "grep -l" which display only the file names which matches the given pattern. Below command will only display file names which have ERROR?
 
grep -l ERROR *.log
grep -l 'main' *.java will list the names of all Java files in the current directory whose contents mention `main'.
 
Example 8
 
 If you want to see line number of matching lines you can use option "grep -n" below command will show on which lines Error has appeared.
grep -n ERROR log file.
 

No comments:

Post a Comment