grep prints lines that contain a match for a pattern within files.
grep can use regular expressions and has several options to improve the quality of the results.
| Version | Release Date | 
|---|---|
| POSIX.2 | 1992-01-01 | 
| IEEE Std 1003.1-2001 | 2001-12-06 | 
| IEEE Std 1003.1, 2004 Edition | 2004-01-01 | 
| IEEE Std 1003.1, 2013 Edition | 2013-04-19 | 
| IEEE Std 1003.1, 2016 Edition | 2016-09-30 | 
| Version | Release Date | 
|---|---|
| 2005-06-14 | 2005-06-14 | 
| 2005-09-06 | 2005-09-06 | 
| 2012-03-30 | 2012-03-30 | 
| 2012-09-17 | 2012-09-17 | 
| 2013-05-14 | 2013-05-14 | 
| Version | Release Date | 
|---|---|
| 2.0 | 1996-10-01 | 
| 2.2 | 1998-04-27 | 
| 2.3 | 1999-02-14 | 
| 2.4.1 | 2000-03-01 | 
| 2.4.2 | 2000-03-09 | 
| 2.4 | 1999-12-03 | 
| 2.5.1 | 2004-10-29 | 
| 2.5.1a | 2004-11-19 | 
| 2.5.3 | 2007-08-02 | 
| 2.5.4 | 2009-02-09 | 
| 2.5 | 2002-03-13 | 
| 2.6.1 | 2010-03-25 | 
| 2.6.2 | 2010-03-29 | 
| 2.6.3 | 2010-04-02 | 
| 2.6 | 2010-03-23 | 
| 2.7 | 2010-09-20 | 
| 2.8 | 2011-05-13 | 
| 2.9 | 2011-06-21 | 
| 2.10 | 2011-11-16 | 
| 2.11 | 2012-03-02 | 
| 2.12 | 2012-04-23 | 
| 2.13 | 2012-07-04 | 
| 2.14 | 2012-08-20 | 
| 2.15 | 2013-10-26 | 
| 2.16 | 2014-01-01 | 
| 2.17 | 2014-02-17 | 
| 2.18 | 2014-02-20 | 
| 2.19 | 2014-05-22 | 
| 2.20 | 2014-06-03 | 
| 2.21 | 2014-11-23 | 
| 2.22 | 2015-11-01 | 
| 2.23 | 2016-02-04 | 
| 2.24 | 2016-03-10 | 
| 2.25 | 2016-04-21 | 
| 2.26 | 2016-10-02 | 
| 2.27 | 2016-12-06 | 
| 2.28 | 2017-02-06 | 
| Version | Release Date | 
|---|---|
| OpenBSD 3.0 | 2001-12-01 | 
| OpenBSD 3.4 | 2003-11-01 | 
| OpenBSD 3.5 | 2004-05-01 | 
| OpenBSD 3.6 | 2004-11-01 | 
| OpenBSD 3.7 | 2005-05-19 | 
| OpenBSD 3.8 | 2005-11-01 | 
| OpenBSD 3.9 | 2006-05-01 | 
| OpenBSD 4.0 | 2006-11-01 | 
| OpenBSD 4.1 | 2007-05-01 | 
| OpenBSD 4.3 | 2008-05-01 | 
| OpenBSD 4.8 | 2010-11-01 | 
| OpenBSD 5.0 | 2011-11-01 | 
| OpenBSD 5.3 | 2013-05-01 | 
| OpenBSD 5.7 | 2015-05-01 | 
| OpenBSD 5.8 | 2015-10-18 | 
| OpenBSD 5.9 | 2016-03-29 | 
| NetBSD 2.0 | 2004-12-09 | 
| NetBSD 4.0 | 2007-12-19 | 
| NetBSD 6.0 | 2012-10-17 | 
| NetBSD 7.0 | 2015-09-25 | 
| FreeBSD 9.0 | 2012-01-02 | 
| FreeBSD 10.0 | 2014-01-16 | 
Running the command:
grep sam someFile.txt
 When someFile.txt  contains:
fred 14 m foo
sam 68 m bar
christina 83 f baz
bob 22 m qux
Sam 41 m quux
 Will produce this output:
sam 68 m bar
 grep -r 'pattern' <directory path>
 To also list line numbers of matches use -n  option
grep -rn 'pattern' <directory path>
 To search only files with particular glob pattern
grep --include='*.txt' -r 'pattern' <directory path>
 Exclude file patterns or directories
grep -R --exclude=*.log 'pattern' <directory path>
grep -R --exclude={*.log,*.class} 'pattern' <directory path>
grep -R --exclude-dir=tmp 'pattern' <directory path>
grep -R --exclude-dir={tmp,lib} 'pattern' <directory path>
 Notes and other useful options
<directory path>  can be skipped if searching in current directory-R  options follows all symbolic links, unlike -r  which follows symbolic links only if they are on the
command line-l  to only list matching files-h  to suppress filename prefix--color=auto  to highlight matched patterns-m <num>  to specify maximum number of matches for each file inputfind <directory path> -type f -exec grep -l 'pattern' {} +
 -n  , -l  , etc can be used as required{} +  is not supported, use {} \;  insteadfind  command like how to include/exclude file types, directories etcGiven a file Sample called movieslist.
Troy
Gladiator
Robin Hood
King Arthur
BraveHeart
The Last Samurai
 Normal grep returns
grep "Gladiator" movieslist
Gladiator
 Now,using grep to print the below or above lines of the file.
To print the below line
grep -A 1 Gladiator movieslist 
Gladiator
Robin Hood
 To print the above line
grep -B 1 Gladiator movieslist 
Troy
Gladiator
 To print both
grep -C 1 Gladiator movieslist 
Troy
Gladiator
Robin Hood
 Given a file sample :
hello
Hello
HELLO_there
 A normal grep  for "hello" returns:
$ grep "hello" sample 
hello
 Using -i  allows to ignore case and match any "hello":
$ grep -i "hello" sample
hello
Hello
HELLO_there
 Given a file sample :
hello world
ahello here
hello_there
 A normal grep  for "hello" returns:
$ grep hello sample 
hello world
ahello here
hello_there
 Using -w  allows to select those lines containing matches that form whole words:
$ grep -w hello sample 
hello world
 echo "Prints only the matching part of the lines" | grep -o "matching"
# prints matching