First create the following demo_file that will be used in the examples
below to demonstrate grep command.<br>
<code> </code>
<pre>$ cat demo_file<br>THIS LINE IS THE 1ST UPPER CASE
LINE IN THIS FILE.<br>this line is the 1st lower case line in
this file.<br>This Line Has All Its First Character Of The Word
With Upper Case.<br><br>Two lines above this line is
empty.<br>And this is the last line.</pre>
<h3>1. Search for the given string in a single file</h3>
<p>The basic usage of grep command is to search for a specific string
in the specified file as shown below.</p>
<pre>Syntax:<br>grep "literal_string" filename</pre>
<p><code> </code></p>
<center>
</center>
<pre>$ grep "this" demo_file<br>this line is the 1st lower
case line in this file.<br>Two lines above this line is
empty.</pre>
<h3>2. Checking for the given string in multiple files.</h3>
<pre>Syntax:<br>grep "string" FILE_PATTERN</pre>
<p><code> </code><br>
This is also a basic usage of grep command. For this example, let us
copy the demo_file to demo_file1. The grep output will also include the
file name in front of the line that matched the specific pattern as
shown below. When the Linux shell sees the meta character, it does the
expansion and gives all the files as input to grep.</p>
<pre>$ cp demo_file demo_file1<br><br>$ grep "this"
demo_*<br>demo_file:this line is the 1st lower case line in this
file.<br>demo_file:Two lines above this line is
empty.<br>demo_file:And this is the last
line.<br>demo_file1:this line is the 1st lower case line in this
file.<br>demo_file1:Two lines above this line is
empty.<br>demo_file1:And this is the last line.</pre>
<h3>3. Case insensitive search using grep -i</h3>
<pre>Syntax:<br>grep -i "string" FILE</pre>
<p><code> </code><br>
This is also a basic usage of the grep. This searches for the given
string/pattern case insensitively. So it matches all the words such as
“the”, “THE” and “The” case insensitively as shown below.</p>
<pre>$ grep -i "the" demo_file<br>THIS LINE IS THE 1ST
UPPER CASE LINE IN THIS FILE.<br>this line is the 1st lower case
line in this file.<br>This Line Has All Its First Character Of
The Word With Upper Case.<br>And this is the last
line.</pre>
<h3>4. Match regular expression in files</h3>
<pre>Syntax:<br>grep "REGEX" filename</pre>
<p><code> </code><br>
This is a very powerful feature, if you can use use regular expression
effectively. In the following example, it searches for all the pattern
that starts with “lines” and ends with “empty” with anything
in-between. i.e To search “lines[anything in-between]empty” in the
demo_file.</p>
<pre>$ grep "lines.*empty" demo_file<br>Two lines above this line is empty.</pre>
<p>From documentation of grep: A regular expression may be followed by
one of several repetition operators:</p>
<ul>
<li>? The preceding item is optional and matched at most once.</li>
<li>* The preceding item will be matched zero or more times.</li>
<li>+ The preceding item will be matched one or more times.</li>
<li>{n} The preceding item is matched exactly n times.</li>
<li>{n,} The preceding item is matched n or more times.</li>
<li>{,m} The preceding item is matched at most m times.</li>
<li>{n,m} The preceding item is matched at least n times, but not
more than m times.</li>
</ul>
<h3>5. Checking for full words, not for sub-strings using grep -w</h3>
<p>If you want to search for a word, and to avoid it to match the
substrings use -w option. Just doing out a normal search will show out
all the lines.<br>
<code> </code><br>
The following example is the regular grep where it is searching for
“is”. When you search for “is”, without any option it will show out
“is”, “his”, “this” and everything which has the substring “is”.</p>
<pre>$ grep -i "is" demo_file<br>THIS LINE IS THE 1ST UPPER
CASE LINE IN THIS FILE.<br>this line is the 1st lower case line
in this file.<br>This Line Has All Its First Character Of The
Word With Upper Case.<br>Two lines above this line is
empty.<br>And this is the last line.</pre>
<p><code> </code><br>
The following example is the WORD grep where it is searching only for
the word “is”. Please note that this output does not contain the line
“This Line Has All Its First Character Of The Word With Upper Case”,
even though “is” is there in the “This”, as the following is looking
only for the word “is” and not for “this”.</p>
<pre>$ grep -iw "is" demo_file<br>THIS LINE IS THE 1ST
UPPER CASE LINE IN THIS FILE.<br>this line is the 1st lower case
line in this file.<br>Two lines above this line is
empty.<br>And this is the last line.</pre>
<h3>6. Displaying lines before/after/around the match using grep -A, -B
and -C</h3>
<p>When doing a grep on a huge file, it may be useful to see some lines
after the match. You might feel handy if grep can show you not only the
matching lines but also the lines after/before/around the match.</p>
<p><code> </code><br>
Please create the following demo_text file for this example.</p>
<pre>$ cat demo_text<br>4. Vim Word
Navigation<br><br>You may want to do several navigation in
relation to the words, such as:<br><br> * e - go to the end
of the current word.<br> * E - go to the end of the current
WORD.<br> * b - go to the previous (before) word.<br> * B -
go to the previous (before) WORD.<br> * w - go to the next
word.<br> * W - go to the next WORD.<br><br>WORD -
WORD consists of a sequence of non-blank characters, separated with
white space.<br>word - word consists of a sequence of letters,
digits and underscores.<br><br>Example to show the
difference between WORD and word<br><br> * 192.168.1.1 -
single WORD<br> * 192.168.1.1 - seven words.</pre>
<h4>6.1 Display N lines after match</h4>
<p>-A is the option which prints the specified N lines after the match
as shown below.</p>
<pre>Syntax:<br>grep -A "string" FILENAME</pre>
<p><code> </code><br>
The following example prints the matched line, along with the 3 lines
after it.</p>
<pre>$ grep -A 3 -i "example" demo_text<br>Example to show
the difference between WORD and word<br><br>* 192.168.1.1 -
single WORD<br>* 192.168.1.1 - seven words.</pre>
<h4>6.2 Display N lines before match</h4>
<p>-B is the option which prints the specified N lines before the match.</p>
<pre>Syntax:<br>grep -B <N> "string" FILENAME<br></pre>
<p><code> </code><br>
When you had option to show the N lines after match, you have the -B
option for the opposite.</p>
<pre>$ grep -B 2 "single WORD" demo_text<br>Example to show
the difference between WORD and word<br><br>* 192.168.1.1 -
single WORD</pre>
<h4>6.3 Display N lines around match</h4>
<p>-C is the option which prints the specified N lines before the
match. In some occasion you might want the match to be appeared with
the lines from both the side. This options shows N lines in both the
side(before & after) of match.</p>
<pre>$ grep -C 2 "Example" demo_text<br>word - word
consists of a sequence of letters, digits and
underscores.<br><br>Example to show the difference between
WORD and word<br><br>* 192.168.1.1 - single WORD</pre>
<h3>7. Highlighting the search using GREP_OPTIONS</h3>
<p>As grep prints out lines from the file by the pattern / string you
had given, if you wanted it to highlight which part matches the line,
then you need to follow the following way.<br>
<code> </code><br>
When you do the following export you will get the highlighting of the
matched searches. In the following example, it will highlight all the
this when you set the GREP_OPTIONS environment variable as shown below.</p>
<pre>$ export GREP_OPTIONS='--color=auto'
GREP_COLOR='100;8'<br><br>$ grep this
demo_file<br><strong>this</strong> line is the 1st
lower case line in this file.<br>Two lines above
<strong>this</strong> line is empty.<br>And
<strong>this</strong> is the last line.</pre>
<h3>8. Searching in all files recursively using grep -r</h3>
<p>When you want to search in all the files under the current directory
and its sub directory. -r option is the one which you need to use. The
following example will look for the string “ramesh” in all the files in
the current directory and all it’s subdirectory.</p>
<pre>$ grep -r "ramesh" *</pre>
<h3>9. Invert match using grep -v</h3>
<p>You had different options to show the lines matched, to show the
lines before match, and to show the lines after match, and to highlight
match. So definitely You’d also want the option -v to do invert match.<br>
<code> </code><br>
When you want to display the lines which does not matches the given
string/pattern, use the option -v as shown below. This example will
display all the lines that did not match the word “go”.</p>
<pre>$ grep -v "go" demo_text<br>4. Vim Word
Navigation<br><br>You may want to do several navigation in
relation to the words, such as:<br><br>WORD - WORD consists
of a sequence of non-blank characters, separated with white
space.<br>word - word consists of a sequence of letters, digits
and underscores.<br><br>Example to show the difference
between WORD and word<br><br>* 192.168.1.1 - single
WORD<br>* 192.168.1.1 - seven words.</pre>
<h3>10. display the lines which does not matches all the given pattern.</h3>
<pre>Syntax:<br>grep -v -e "pattern" -e "pattern"</pre>
<p><code> </code></p>
<pre>$ cat
test-file.txt<br>a<br>b<br>c<br>d<br><br>$
grep -v -e "a" -e "b" -e "c" test-file.txt<br>d</pre>
<h3>11. Counting the number of matches using grep -c</h3>
<p>When you want to count that how many lines matches the given
pattern/string, then use the option -c.</p>
<pre>Syntax:<br>grep -c "pattern" filename</pre>
<p><code> </code></p>
<pre>$ grep -c "go" demo_text<br>6</pre>
<p><code> </code><br>
When you want do find out how many lines matches the pattern</p>
<pre>$ grep -c this demo_file<br>3</pre>
<p><code> </code><br>
When you want do find out how many lines that does not match the pattern</p>
<pre>$ grep -v -c this demo_file<br>4</pre>
<h3>12. Display only the file names which matches the given pattern
using grep -l</h3>
<p>If you want the grep to show out only the file names which matched
the given pattern, use the -l (lower-case L) option.<br>
<code> </code><br>
When you give multiple files to the grep as input, it displays the
names of file which contains the text that matches the pattern, will be
very handy when you try to find some notes in your whole directory
structure.</p>
<pre>$ grep -l this demo_*<br>demo_file<br>demo_file1</pre>
<h3>13. Show only the matched string</h3>
<p>By default grep will show the line which matches the given
pattern/string, but if you want the grep to show out only the matched
string of the pattern then use the -o option.<br>
<code> </code><br>
It might not be that much useful when you give the string straight
forward. But it becomes very useful when you give a regex pattern and
trying to see what it matches as</p>
<pre>$ grep -o "is.*line" demo_file<br>is line is the 1st
lower case line<br>is line<br>is is the last
line</pre>
<h3>14. Show the position of match in the line</h3>
<p>When you want grep to show the position where it matches the pattern
in the file, use the following options as</p>
<pre>Syntax:<br>grep -o -b "pattern" file</pre>
<p><code> </code></p>
<pre>$ cat
temp-file.txt<br>12345<br>12345<br><br>$ grep
-o -b "3" temp-file.txt<br>2:3<br>8:3</pre>
<p><code> </code><br>
<strong>Note:</strong> The output of the grep command above is not the
position in the line, it is byte offset of the whole file.</p>
<h3>15. Show line number while displaying the output using grep -n</h3>
<p>To show the line number of file with the line matched. It does
1-based line numbering for each file. Use -n option to utilize this
feature.</p>
<pre>$ grep -n "go" demo_text<br>5: * e - go to the end of
the current word.<br>6: * E - go to the end of the current
WORD.<br>7: * b - go to the previous (before) word.<br>8: *
B - go to the previous (before) WORD.<br>9: * w - go to the next
word.<br>10: * W - go to the next WORD.</pre>
<p><code> </code></p>
link source