SlideShare a Scribd company logo
This is part of the on-going 15 Examples series, where 15 detailed examples will be
provided for a specific command or functionality. Earlier we discussed 15 practical
examples for Linux find command, Linux command line history andmysqladmin
command.
In this article let us review 15 practical examples of Linux grep command that will be
very useful to both newbies and experts.
First create the following demo_file that will be used in the examples below to
demonstrate grep command.
$ cat demo_file
THIS LINE IS THE 1ST UPPER CASE LINE IN THIS FILE.
this line is the 1st lower case line in this file.
This Line Has All Its First Character Of The Word With Upper Case.
Two lines above this line is empty.
And this is the last line.
1. Searchfor the given string in a single file
The basic usage of grep command is to search for a specific string in the specified file as
shown below.
Syntax:
grep "literal_string" filename
$ grep "this" demo_file
this line is the 1st lower case line in this file.
Two lines above this line is empty.
And this is the last line.
2. Checking for the given string in multiple files.
Syntax:
grep "string" FILE_PATTERN
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.
$ cp demo_file demo_file1
$ grep "this" demo_*
demo_file:this line is the 1st lower case line in this file.
demo_file:Two lines above this line is empty.
demo_file:And this is the last line.
demo_file1:this line is the 1st lower case line in this file.
demo_file1:Two lines above this line is empty.
demo_file1:And this is the last line.
3. Case insensitive search using grep -i
Syntax:
grep -i "string" FILE
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.
$ grep -i "the" demo_file
THIS LINE IS THE 1ST UPPER CASE LINE IN THIS FILE.
this line is the 1st lower case line in this file.
This Line Has All Its First Character Of The Word With Upper Case.
And this is the last line.
4. Match regular expression in files
Syntax:
grep "REGEX" filename
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 Tosearch “lines[anything in-between]empty” in
the demo_file.
$ grep "lines.*empty" demo_file
Two lines above this line is empty.
From documentation of grep: A regular expression may be followed by one of several
repetition operators:
 ? The preceding item is optional and matched at most once.
 * The preceding item will be matched zero or more times.
 + The preceding item will be matched one or more times.
 {n} The preceding item is matched exactly n times.
 {n,} The preceding item is matched n or more times.
 {,m} The preceding item is matched at most m times.
 {n,m} The preceding item is matched at least n times, but not more than m times.
5. Checking for full words, not for sub-stringsusing grep -w
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.
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”.
$ grep -i "is" demo_file
THIS LINE IS THE 1ST UPPER CASE LINE IN THIS FILE.
this line is the 1st lower case line in this file.
This Line Has All Its First Character Of The Word With Upper Case.
Two lines above this line is empty.
And this is the last line.
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”.
$ grep -iw "is" demo_file
THIS LINE IS THE 1ST UPPER CASE LINE IN THIS FILE.
this line is the 1st lower case line in this file.
Two lines above this line is empty.
And this is the last line.
6. Displaying lines before/after/aroundthe matchusing grep -A, -B
and -C
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.
Please create the following demo_text file for this example.
$ cat demo_text
4. Vim Word Navigation
You may want to do several navigation in relation to the words, such as:
* e - go to the end of the current word.
* E - go to the end of the current WORD.
* b - go to the previous (before) word.
* B - go to the previous (before) WORD.
* w - go to the next word.
* W - go to the next WORD.
WORD - WORD consists of a sequence of non-blank characters, separated with white
space.
word - word consists of a sequence of letters, digits and underscores.
Example to show the difference between WORD and word
* 192.168.1.1 - single WORD
* 192.168.1.1 - seven words.
6.1 Display N lines after match
-A is the option which prints the specified N lines after the match as shown below.
Syntax:
grep -A <N> "string" FILENAME
The following example prints the matched line, along with the 3 lines after it.
$ grep -A 3 -i "example" demo_text
Example to show the difference between WORD and word
* 192.168.1.1 - single WORD
* 192.168.1.1 - seven words.
6.2 Display N lines before match
-B is the option which prints the specified N lines before the match.
Syntax:
grep -B <N> "string" FILENAME
When you had option to show the N lines after match, you have the -B option for the
opposite.
$ grep -B 2 "single WORD" demo_text
Example to show the difference between WORD and word
* 192.168.1.1 - single WORD
6.3 Display N lines around match
-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.
$ grep -C 2 "Example" demo_text
word - word consists of a sequence of letters, digits and underscores.
Example to show the difference between WORD and word
* 192.168.1.1 - single WORD
7. Highlighting the searchusing GREP_OPTIONS
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.
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.
$ export GREP_OPTIONS='--color=auto' GREP_COLOR='100;8'
$ grep this demo_file
this line is the 1st lower case line in this file.
Two lines above this line is empty.
And this is the last line.
8. Searching in all files recursivelyusing grep -r
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.
$ grep -r "ramesh" *
9. Invert match using grep -v
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 todo invert match.
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”.
$ grep -v "go" demo_text
4. Vim Word Navigation
You may want to do several navigation in relation to the words, such as:
WORD - WORD consists of a sequence of non-blank characters, separated with white
space.
word - word consists of a sequence of letters, digits and underscores.
Example to show the difference between WORD and word
* 192.168.1.1 - single WORD
* 192.168.1.1 - seven words.
10. display the lines which does not matchesall the given pattern.
Syntax:
grep -v -e "pattern" -e "pattern"
$ cat test-file.txt
a
b
c
d
$ grep -v -e "a" -e "b" -e "c" test-file.txt
d
11. Counting the number of matchesusing grep -c
When you want to count that how many lines matches the given pattern/string, then use
the option -c.
Syntax:
grep -c "pattern" filename
$ grep -c "go" demo_text
6
When you want do find out how many lines matches the pattern
$ grep -c this demo_file
3
When you want do find out how many lines that does not match the pattern
$ grep -v -c this demo_file
4
12. Display only the file names which matchesthe given pattern
using grep-l
If you want the grep to show out only the file names which matched the given pattern,
use the -l (lower-case L) option.
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 tofind some
notes in your whole directory structure.
$ grep -l this demo_*
demo_file
demo_file1
13. Show only the matched string
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 -ooption.
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
$ grep -o "is.*line" demo_file
is line is the 1st lower case line
is line
is is the last line
14. Show the position of matchin the line
When you want grep to show the position where it matches the pattern in the file, use
the following options as
Syntax:
grep -o -b "pattern" file
$ cat temp-file.txt
12345
12345
$ grep -o -b "3" temp-file.txt
2:3
8:3
Note: The output of the grep command above is not the position in the line, it is byte
offset of the whole file.
15. Show line number while displaying the output using grep -n
Toshow 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.
$ grep -n "go" demo_text
5: * e - go to the end of the current word.
6: * E - go to the end of the current WORD.
7: * b - go to the previous (before) word.
8: * B - go to the previous (before) WORD.
9: * w - go to the next word.
10: * W - go to the next WORD.
Additional Grep Tutorials
Regular expressions are used to search and manipulate the text, based on the patterns.
Most of the Linux commands and programming languages use regular expression.
Grep command is used to search for a specific string in a file. Please refer our earlier
article for 15 practical grep command examples.
You can also use regular expressions with grep command when you want to search for a
text containing a particular pattern. Regular expressions search for the patterns on each
line of the file. It simplifies our search operation.
This articles is part of a 2 article series.
This part 1 article covers grep examples for simple regular expressions. The future part 2
article will cover advanced regular expression examples in grep.
Let us take the file /var/log/messages file which will be used in our examples.
Example1. Beginning of line ( ^ )
In grep command, caret Symbol ^ matches the expression at the start of a line. In the
following example, it displays all the line which starts with the Nov 10. i.e All the
messages logged on November 10.
$ grep "^Nov 10" messages.1
Nov 10 01:12:55 gs123 ntpd[2241]: time reset +0.177479 s
Nov 10 01:17:17 gs123 ntpd[2241]: synchronized to LOCAL(0), stratum 10
Nov 10 01:18:49 gs123 ntpd[2241]: synchronized to 15.1.13.13, stratum 3
Nov 10 13:21:26 gs123 ntpd[2241]: time reset +0.146664 s
Nov 10 13:25:46 gs123 ntpd[2241]: synchronized to LOCAL(0), stratum 10
Nov 10 13:26:27 gs123 ntpd[2241]: synchronized to 15.1.13.13, stratum 3
The ^ matches the expression in the beginning of a line, only if it is the first character in
a regular expression. ^N matches line beginning with N.
Example2. End of the line ( $)
Character $ matches the expression at the end of a line. The following command will
help you to get all the lines which ends with the word “terminating”.
$ grep "terminating.$" messages
Jul 12 17:01:09 cloneme kernel: Kernel log daemon terminating.
Oct 28 06:29:54 cloneme kernel: Kernel log daemon terminating.
From the above output you can come to know when all the kernel log has got
terminated. Just like ^ matches the beginning of the line only if it is the first character, $
matches the end of the line only if it is the last character in a regular expression.
Example3. Count of empty lines ( ^$ )
Using ^ and $ character you can find out the empty lines available in a file. “^$”
specifies empty line.
$ grep -c "^$" messages anaconda.log
messages:0
anaconda.log:3
The above commands displays the count of the empty lines available in the messages
and anaconda.log files.
Example4. Single Character (.)
The special meta-character “.” (dot) matches any character except the end of the line
character. Let us take the input file which has the content as follows.
$ cat input
1. first line
2. hi hello
3. hi zello how are you
4. cello
5. aello
6. eello
7. last line
Now let us search for a word which has any single character followed by ello. i.e hello,
cello etc.,
$ grep ".ello" input
2. hi hello
3. hi zello how are you
4. cello
5. aello
6. eello
In case if you want to search for a word which has only 4 character you can give grep -w
“….” where single dot represents any single character.
Example5. Zero or more occurrence(*)
The special character “*” matches zero or more occurrence of the previous character. For
example, the pattern ‘1*’ matches zeroor more ‘1’.
The following example searches for a pattern “kernel: *” i.e kernel: and zero or more
occurrence of space character.
$ grep "kernel: *." *
messages.4:Jul 12 17:01:02 cloneme kernel: ACPI: PCI interrupt for device
0000:00:11.0 disabled
messages.4:Oct 28 06:29:49 cloneme kernel: ACPI: PM-Timer IO Port: 0x1008
messages.4:Oct 28 06:31:06 btovm871 kernel: sda: sda1 sda2 sda3
messages.4:Oct 28 06:31:06 btovm871 kernel: sd 0:0:0:0: Attached scsi disk sda
.
.
In the above example it matches for kernel and colon symbol followed by any number of
spaces/no space and “.” matches any single character.
Example6. One or more occurrence(+)
The special character “+” matches one or more occurrence of the previous character. ”
+” matches at least one or more space character.
If there is no space then it will not match. The character “+” comes under extended
regular expression. So you have to escape when you want to use it with the grep
command.
$ cat input
hi hello
hi hello how are you
hihello
$ grep "hi +hello" input
hi hello
hi hello how are you
In the above example, the grep pattern matches for the pattern ‘hi’, followed by one or
more space character, followed by “hello”.
If there is no space between hi and hello it wont match that. However, * character
matches zero or more occurrence.
“hihello” will be matched by * as shown below.
$ grep "hi *hello" input
hi hello
hi hello how are you
hihello
$
Example7. Zero or one occurrence(?)
The special character “?” matches zero or one occurrence of the previous character. “0?”
matches single zero or nothing.
$ grep "hi ?hello" input
hi hello
hihello
“hi ?hello” matches hi and hello with single space (hi hello) and no space (hihello).
The line which has more than one space between hi and hello did not get matched in the
above command.
Example8.Escaping the special character()
If you want to search for special characters (for example: * , dot) in the content you have
to escape the special character in the regular expression.
$ grep "127.0.0.1" /var/log/messages.4
Oct 28 06:31:10 btovm871 ntpd[2241]: Listening on interface l o, 127.0.0.1#123 Enabled
Example9. Character Class ([0-9])
The character class is nothing but list of characters mentioned with in the square
bracket which is used to match only one out of several characters.
$ grep -B 1 "[0123456789]+ times" /var/log/messages.4
Oct 28 06:38:35 btovm871 init: open(/dev/pts/0): No such file or directory
Oct 28 06:38:35 btovm871 last message repeated 2 times
Oct 28 06:38:38 btovm871 pcscd: winscard.c:304:SCardConnect() Reader E -Gate 0 0 Not
Found
Oct 28 06:38:38 btovm871 last message repeated 3 times
Repeated messages will be logged in messages logfile as “last message repeated n times”.
The above example searches for the line which has any number (0to9) followed by the
word “times”. If it matches it displays the line before the matched line and matched line
also.
With in the square bracket, using hyphen you can specify the range of characters. Like
[0123456789] can be represented by [0-9]. Alphabets range also can be specified such
as [a-z],[A-Z] etc. So the above command can also be written as
$ grep -B 1 "[0-9]+ times" /var/log/messages.4
Example10. Exception in the characterclass
If you want to search for all the characters except those in the square bracket, then use ^
(Caret) symbol as the first character after open square bracket. The following example
searches for a line which does not start with the vowel letter from dictionary word file in
linux.
$ grep -i "^[^aeiou]" /usr/share/dict/linux.words
1080
10-point
10th
11-point
12-point
16-point
18-point
1st
2
First caret symbol in regular expression represents beginning of the line. However, caret
symbol inside the square bracket represents “except” — i.e match except everything in
the square bracket.

More Related Content

PPTX
Grep - A powerful search utility
PPT
Shell Scripting
PDF
Unix - An Introduction
PPTX
Basics of shell programming
PPT
Introduction to Makefile
PDF
Shell scripting
PDF
Shell scripting
PDF
Linux Basic Commands
Grep - A powerful search utility
Shell Scripting
Unix - An Introduction
Basics of shell programming
Introduction to Makefile
Shell scripting
Shell scripting
Linux Basic Commands

What's hot (20)

PDF
Course 102: Lecture 4: Using Wild Cards
PPTX
Know the UNIX Commands
PDF
Complete Guide for Linux shell programming
PPTX
Unix Operating System
PPT
Linux basic commands
PPTX
Shell scripting
PDF
Ubuntu – Linux Useful Commands
PDF
Course 102: Lecture 5: File Handling Internals
PPTX
Bash Shell Scripting
PDF
Course 102: Lecture 2: Unwrapping Linux
PDF
Course 102: Lecture 6: Seeking Help
ODP
Introduction to Shell script
PPT
Unix/Linux Basic Commands and Shell Script
PPTX
Linux file system
PDF
Linux basic commands with examples
PPT
Linux presentation
PPT
Basic Unix
PPT
Ipc in linux
PPT
Vi editor in linux
PDF
makefiles tutorial
Course 102: Lecture 4: Using Wild Cards
Know the UNIX Commands
Complete Guide for Linux shell programming
Unix Operating System
Linux basic commands
Shell scripting
Ubuntu – Linux Useful Commands
Course 102: Lecture 5: File Handling Internals
Bash Shell Scripting
Course 102: Lecture 2: Unwrapping Linux
Course 102: Lecture 6: Seeking Help
Introduction to Shell script
Unix/Linux Basic Commands and Shell Script
Linux file system
Linux basic commands with examples
Linux presentation
Basic Unix
Ipc in linux
Vi editor in linux
makefiles tutorial
Ad

Viewers also liked (20)

DOCX
Learning Grep
PPT
Regular Expressions grep and egrep
PDF
Linux 101-hacks
PPT
Unix command-line tools
KEY
Sed & awk the dynamic duo
PDF
PDF
7th sem it_CSVTU
PPSX
Awk essentials
DOCX
Artificial Intelligence Lab File
PPS
UNIX - Class6 - sed - Detail
PPTX
Practical unix utilities for text processing
DOC
Some basic unix commands
PPTX
Hill-climbing #2
PPT
Learning sed and awk
ODP
Hillclimbing search algorthim #introduction
DOC
Chapter 2 (final)
PPT
Heuristic Search Techniques {Artificial Intelligence}
PPT
Presentation1 linux os
PPT
Hill climbing
PDF
Linux intro 3 grep + Unix piping
Learning Grep
Regular Expressions grep and egrep
Linux 101-hacks
Unix command-line tools
Sed & awk the dynamic duo
7th sem it_CSVTU
Awk essentials
Artificial Intelligence Lab File
UNIX - Class6 - sed - Detail
Practical unix utilities for text processing
Some basic unix commands
Hill-climbing #2
Learning sed and awk
Hillclimbing search algorthim #introduction
Chapter 2 (final)
Heuristic Search Techniques {Artificial Intelligence}
Presentation1 linux os
Hill climbing
Linux intro 3 grep + Unix piping
Ad

Similar to Grep (20)

DOCX
15 practical grep command examples in linux
DOCX
15 practical grep command examples in linux
DOCX
Unix
PDF
15 practical grep command examples in linux : unix
PPT
grep and egrep linux presentation for lecture
PPTX
Using Regular Expressions in Grep
PPT
Practical Example of grep command in unix
PPT
Spsl II unit
PPT
L4_grep command ppt for unix linux programming
PDF
grep.1.pdf
PDF
grep.1.pdf
PPT
08 text processing_tools
RTF
Unix lab manual
PPTX
Lpt lopsa
PPTX
terminal command2.pptx with good explanation
PPTX
unix- Sort, uniq,tr,grep
PPTX
PRACTICAL -UNIX, shell programs, shell commands
PPTX
PRACTICAL -UNIX, shell commands in unix, practice commands on shell
PPTX
PRACTICAL -UNIX, main unix commands in practice
PPTX
Basic unix commands
15 practical grep command examples in linux
15 practical grep command examples in linux
Unix
15 practical grep command examples in linux : unix
grep and egrep linux presentation for lecture
Using Regular Expressions in Grep
Practical Example of grep command in unix
Spsl II unit
L4_grep command ppt for unix linux programming
grep.1.pdf
grep.1.pdf
08 text processing_tools
Unix lab manual
Lpt lopsa
terminal command2.pptx with good explanation
unix- Sort, uniq,tr,grep
PRACTICAL -UNIX, shell programs, shell commands
PRACTICAL -UNIX, shell commands in unix, practice commands on shell
PRACTICAL -UNIX, main unix commands in practice
Basic unix commands

More from Dr.M.Karthika parthasarathy (20)

PDF
IoT Enabled Wireless Technology Based Monitoring and Speed Control of Motor U...
DOC
Linux Lab Manual.doc
PDF
DOCX
PPTX
Unit 1 Introduction to Artificial Intelligence.pptx
DOCX
Unit I What is Artificial Intelligence.docx
PPTX
Introduction to IoT - Unit II.pptx
PDF
DOCX
Chapter 3 heuristic search techniques
DOCX
Ai mcq chapter 2
PPTX
Introduction to IoT unit II
PPTX
Introduction to IoT - Unit I
PDF
Internet of things Unit 1 one word
DOCX
PPTX
Overview of Deadlock unit 3 part 1
PPTX
Examples in OS synchronization for UG
PPTX
Process Synchronization - Monitors
DOCX
.net progrmming part4
DOCX
.net progrmming part3
DOCX
.net progrmming part1
IoT Enabled Wireless Technology Based Monitoring and Speed Control of Motor U...
Linux Lab Manual.doc
Unit 1 Introduction to Artificial Intelligence.pptx
Unit I What is Artificial Intelligence.docx
Introduction to IoT - Unit II.pptx
Chapter 3 heuristic search techniques
Ai mcq chapter 2
Introduction to IoT unit II
Introduction to IoT - Unit I
Internet of things Unit 1 one word
Overview of Deadlock unit 3 part 1
Examples in OS synchronization for UG
Process Synchronization - Monitors
.net progrmming part4
.net progrmming part3
.net progrmming part1

Recently uploaded (20)

PPTX
Final Presentation General Medicine 03-08-2024.pptx
PDF
Empowerment Technology for Senior High School Guide
PPTX
History, Philosophy and sociology of education (1).pptx
PDF
SOIL: Factor, Horizon, Process, Classification, Degradation, Conservation
PDF
Black Hat USA 2025 - Micro ICS Summit - ICS/OT Threat Landscape
PPTX
Cell Types and Its function , kingdom of life
PDF
IGGE1 Understanding the Self1234567891011
PDF
LDMMIA Reiki Yoga Finals Review Spring Summer
PPTX
Chinmaya Tiranga Azadi Quiz (Class 7-8 )
PDF
medical_surgical_nursing_10th_edition_ignatavicius_TEST_BANK_pdf.pdf
PPTX
UNIT III MENTAL HEALTH NURSING ASSESSMENT
PPTX
Unit 4 Skeletal System.ppt.pptxopresentatiom
PPTX
A powerpoint presentation on the Revised K-10 Science Shaping Paper
PDF
احياء السادس العلمي - الفصل الثالث (التكاثر) منهج متميزين/كلية بغداد/موهوبين
PDF
ChatGPT for Dummies - Pam Baker Ccesa007.pdf
PPTX
Radiologic_Anatomy_of_the_Brachial_plexus [final].pptx
PPTX
202450812 BayCHI UCSC-SV 20250812 v17.pptx
PDF
LNK 2025 (2).pdf MWEHEHEHEHEHEHEHEHEHEHE
PPTX
UV-Visible spectroscopy..pptx UV-Visible Spectroscopy – Electronic Transition...
PDF
1_English_Language_Set_2.pdf probationary
Final Presentation General Medicine 03-08-2024.pptx
Empowerment Technology for Senior High School Guide
History, Philosophy and sociology of education (1).pptx
SOIL: Factor, Horizon, Process, Classification, Degradation, Conservation
Black Hat USA 2025 - Micro ICS Summit - ICS/OT Threat Landscape
Cell Types and Its function , kingdom of life
IGGE1 Understanding the Self1234567891011
LDMMIA Reiki Yoga Finals Review Spring Summer
Chinmaya Tiranga Azadi Quiz (Class 7-8 )
medical_surgical_nursing_10th_edition_ignatavicius_TEST_BANK_pdf.pdf
UNIT III MENTAL HEALTH NURSING ASSESSMENT
Unit 4 Skeletal System.ppt.pptxopresentatiom
A powerpoint presentation on the Revised K-10 Science Shaping Paper
احياء السادس العلمي - الفصل الثالث (التكاثر) منهج متميزين/كلية بغداد/موهوبين
ChatGPT for Dummies - Pam Baker Ccesa007.pdf
Radiologic_Anatomy_of_the_Brachial_plexus [final].pptx
202450812 BayCHI UCSC-SV 20250812 v17.pptx
LNK 2025 (2).pdf MWEHEHEHEHEHEHEHEHEHEHE
UV-Visible spectroscopy..pptx UV-Visible Spectroscopy – Electronic Transition...
1_English_Language_Set_2.pdf probationary

Grep

  • 1. This is part of the on-going 15 Examples series, where 15 detailed examples will be provided for a specific command or functionality. Earlier we discussed 15 practical examples for Linux find command, Linux command line history andmysqladmin command. In this article let us review 15 practical examples of Linux grep command that will be very useful to both newbies and experts. First create the following demo_file that will be used in the examples below to demonstrate grep command. $ cat demo_file THIS LINE IS THE 1ST UPPER CASE LINE IN THIS FILE. this line is the 1st lower case line in this file. This Line Has All Its First Character Of The Word With Upper Case. Two lines above this line is empty. And this is the last line. 1. Searchfor the given string in a single file The basic usage of grep command is to search for a specific string in the specified file as shown below.
  • 2. Syntax: grep "literal_string" filename $ grep "this" demo_file this line is the 1st lower case line in this file. Two lines above this line is empty. And this is the last line. 2. Checking for the given string in multiple files. Syntax: grep "string" FILE_PATTERN 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. $ cp demo_file demo_file1 $ grep "this" demo_* demo_file:this line is the 1st lower case line in this file.
  • 3. demo_file:Two lines above this line is empty. demo_file:And this is the last line. demo_file1:this line is the 1st lower case line in this file. demo_file1:Two lines above this line is empty. demo_file1:And this is the last line. 3. Case insensitive search using grep -i Syntax: grep -i "string" FILE 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. $ grep -i "the" demo_file THIS LINE IS THE 1ST UPPER CASE LINE IN THIS FILE. this line is the 1st lower case line in this file. This Line Has All Its First Character Of The Word With Upper Case. And this is the last line.
  • 4. 4. Match regular expression in files Syntax: grep "REGEX" filename 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 Tosearch “lines[anything in-between]empty” in the demo_file. $ grep "lines.*empty" demo_file Two lines above this line is empty. From documentation of grep: A regular expression may be followed by one of several repetition operators:  ? The preceding item is optional and matched at most once.  * The preceding item will be matched zero or more times.  + The preceding item will be matched one or more times.  {n} The preceding item is matched exactly n times.  {n,} The preceding item is matched n or more times.  {,m} The preceding item is matched at most m times.  {n,m} The preceding item is matched at least n times, but not more than m times. 5. Checking for full words, not for sub-stringsusing grep -w 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. The following example is the regular grep where it is searching for “is”. When you search
  • 5. for “is”, without any option it will show out “is”, “his”, “this” and everything which has the substring “is”. $ grep -i "is" demo_file THIS LINE IS THE 1ST UPPER CASE LINE IN THIS FILE. this line is the 1st lower case line in this file. This Line Has All Its First Character Of The Word With Upper Case. Two lines above this line is empty. And this is the last line. 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”. $ grep -iw "is" demo_file THIS LINE IS THE 1ST UPPER CASE LINE IN THIS FILE. this line is the 1st lower case line in this file. Two lines above this line is empty. And this is the last line. 6. Displaying lines before/after/aroundthe matchusing grep -A, -B and -C
  • 6. 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. Please create the following demo_text file for this example. $ cat demo_text 4. Vim Word Navigation You may want to do several navigation in relation to the words, such as: * e - go to the end of the current word. * E - go to the end of the current WORD. * b - go to the previous (before) word. * B - go to the previous (before) WORD. * w - go to the next word. * W - go to the next WORD. WORD - WORD consists of a sequence of non-blank characters, separated with white space.
  • 7. word - word consists of a sequence of letters, digits and underscores. Example to show the difference between WORD and word * 192.168.1.1 - single WORD * 192.168.1.1 - seven words. 6.1 Display N lines after match -A is the option which prints the specified N lines after the match as shown below. Syntax: grep -A <N> "string" FILENAME The following example prints the matched line, along with the 3 lines after it. $ grep -A 3 -i "example" demo_text Example to show the difference between WORD and word * 192.168.1.1 - single WORD
  • 8. * 192.168.1.1 - seven words. 6.2 Display N lines before match -B is the option which prints the specified N lines before the match. Syntax: grep -B <N> "string" FILENAME When you had option to show the N lines after match, you have the -B option for the opposite. $ grep -B 2 "single WORD" demo_text Example to show the difference between WORD and word * 192.168.1.1 - single WORD 6.3 Display N lines around match -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. $ grep -C 2 "Example" demo_text word - word consists of a sequence of letters, digits and underscores.
  • 9. Example to show the difference between WORD and word * 192.168.1.1 - single WORD 7. Highlighting the searchusing GREP_OPTIONS 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. 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. $ export GREP_OPTIONS='--color=auto' GREP_COLOR='100;8' $ grep this demo_file this line is the 1st lower case line in this file. Two lines above this line is empty. And this is the last line. 8. Searching in all files recursivelyusing grep -r 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.
  • 10. $ grep -r "ramesh" * 9. Invert match using grep -v 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 todo invert match. 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”. $ grep -v "go" demo_text 4. Vim Word Navigation You may want to do several navigation in relation to the words, such as: WORD - WORD consists of a sequence of non-blank characters, separated with white space. word - word consists of a sequence of letters, digits and underscores. Example to show the difference between WORD and word
  • 11. * 192.168.1.1 - single WORD * 192.168.1.1 - seven words. 10. display the lines which does not matchesall the given pattern. Syntax: grep -v -e "pattern" -e "pattern" $ cat test-file.txt a b c d $ grep -v -e "a" -e "b" -e "c" test-file.txt d 11. Counting the number of matchesusing grep -c When you want to count that how many lines matches the given pattern/string, then use the option -c.
  • 12. Syntax: grep -c "pattern" filename $ grep -c "go" demo_text 6 When you want do find out how many lines matches the pattern $ grep -c this demo_file 3 When you want do find out how many lines that does not match the pattern $ grep -v -c this demo_file 4 12. Display only the file names which matchesthe given pattern using grep-l If you want the grep to show out only the file names which matched the given pattern, use the -l (lower-case L) option. 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 tofind some notes in your whole directory structure. $ grep -l this demo_*
  • 13. demo_file demo_file1 13. Show only the matched string 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 -ooption. 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 $ grep -o "is.*line" demo_file is line is the 1st lower case line is line is is the last line 14. Show the position of matchin the line When you want grep to show the position where it matches the pattern in the file, use the following options as Syntax: grep -o -b "pattern" file $ cat temp-file.txt 12345
  • 14. 12345 $ grep -o -b "3" temp-file.txt 2:3 8:3 Note: The output of the grep command above is not the position in the line, it is byte offset of the whole file. 15. Show line number while displaying the output using grep -n Toshow 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. $ grep -n "go" demo_text 5: * e - go to the end of the current word. 6: * E - go to the end of the current WORD. 7: * b - go to the previous (before) word. 8: * B - go to the previous (before) WORD. 9: * w - go to the next word.
  • 15. 10: * W - go to the next WORD. Additional Grep Tutorials Regular expressions are used to search and manipulate the text, based on the patterns. Most of the Linux commands and programming languages use regular expression. Grep command is used to search for a specific string in a file. Please refer our earlier article for 15 practical grep command examples. You can also use regular expressions with grep command when you want to search for a text containing a particular pattern. Regular expressions search for the patterns on each line of the file. It simplifies our search operation. This articles is part of a 2 article series. This part 1 article covers grep examples for simple regular expressions. The future part 2 article will cover advanced regular expression examples in grep. Let us take the file /var/log/messages file which will be used in our examples. Example1. Beginning of line ( ^ ) In grep command, caret Symbol ^ matches the expression at the start of a line. In the following example, it displays all the line which starts with the Nov 10. i.e All the messages logged on November 10. $ grep "^Nov 10" messages.1 Nov 10 01:12:55 gs123 ntpd[2241]: time reset +0.177479 s Nov 10 01:17:17 gs123 ntpd[2241]: synchronized to LOCAL(0), stratum 10
  • 16. Nov 10 01:18:49 gs123 ntpd[2241]: synchronized to 15.1.13.13, stratum 3 Nov 10 13:21:26 gs123 ntpd[2241]: time reset +0.146664 s Nov 10 13:25:46 gs123 ntpd[2241]: synchronized to LOCAL(0), stratum 10 Nov 10 13:26:27 gs123 ntpd[2241]: synchronized to 15.1.13.13, stratum 3 The ^ matches the expression in the beginning of a line, only if it is the first character in a regular expression. ^N matches line beginning with N. Example2. End of the line ( $) Character $ matches the expression at the end of a line. The following command will help you to get all the lines which ends with the word “terminating”. $ grep "terminating.$" messages Jul 12 17:01:09 cloneme kernel: Kernel log daemon terminating. Oct 28 06:29:54 cloneme kernel: Kernel log daemon terminating. From the above output you can come to know when all the kernel log has got terminated. Just like ^ matches the beginning of the line only if it is the first character, $ matches the end of the line only if it is the last character in a regular expression. Example3. Count of empty lines ( ^$ ) Using ^ and $ character you can find out the empty lines available in a file. “^$” specifies empty line.
  • 17. $ grep -c "^$" messages anaconda.log messages:0 anaconda.log:3 The above commands displays the count of the empty lines available in the messages and anaconda.log files. Example4. Single Character (.) The special meta-character “.” (dot) matches any character except the end of the line character. Let us take the input file which has the content as follows. $ cat input 1. first line 2. hi hello 3. hi zello how are you 4. cello 5. aello 6. eello 7. last line
  • 18. Now let us search for a word which has any single character followed by ello. i.e hello, cello etc., $ grep ".ello" input 2. hi hello 3. hi zello how are you 4. cello 5. aello 6. eello In case if you want to search for a word which has only 4 character you can give grep -w “….” where single dot represents any single character. Example5. Zero or more occurrence(*) The special character “*” matches zero or more occurrence of the previous character. For example, the pattern ‘1*’ matches zeroor more ‘1’. The following example searches for a pattern “kernel: *” i.e kernel: and zero or more occurrence of space character. $ grep "kernel: *." * messages.4:Jul 12 17:01:02 cloneme kernel: ACPI: PCI interrupt for device 0000:00:11.0 disabled messages.4:Oct 28 06:29:49 cloneme kernel: ACPI: PM-Timer IO Port: 0x1008
  • 19. messages.4:Oct 28 06:31:06 btovm871 kernel: sda: sda1 sda2 sda3 messages.4:Oct 28 06:31:06 btovm871 kernel: sd 0:0:0:0: Attached scsi disk sda . . In the above example it matches for kernel and colon symbol followed by any number of spaces/no space and “.” matches any single character. Example6. One or more occurrence(+) The special character “+” matches one or more occurrence of the previous character. ” +” matches at least one or more space character. If there is no space then it will not match. The character “+” comes under extended regular expression. So you have to escape when you want to use it with the grep command. $ cat input hi hello hi hello how are you hihello $ grep "hi +hello" input
  • 20. hi hello hi hello how are you In the above example, the grep pattern matches for the pattern ‘hi’, followed by one or more space character, followed by “hello”. If there is no space between hi and hello it wont match that. However, * character matches zero or more occurrence. “hihello” will be matched by * as shown below. $ grep "hi *hello" input hi hello hi hello how are you hihello $ Example7. Zero or one occurrence(?) The special character “?” matches zero or one occurrence of the previous character. “0?” matches single zero or nothing. $ grep "hi ?hello" input hi hello
  • 21. hihello “hi ?hello” matches hi and hello with single space (hi hello) and no space (hihello). The line which has more than one space between hi and hello did not get matched in the above command. Example8.Escaping the special character() If you want to search for special characters (for example: * , dot) in the content you have to escape the special character in the regular expression. $ grep "127.0.0.1" /var/log/messages.4 Oct 28 06:31:10 btovm871 ntpd[2241]: Listening on interface l o, 127.0.0.1#123 Enabled Example9. Character Class ([0-9]) The character class is nothing but list of characters mentioned with in the square bracket which is used to match only one out of several characters. $ grep -B 1 "[0123456789]+ times" /var/log/messages.4 Oct 28 06:38:35 btovm871 init: open(/dev/pts/0): No such file or directory Oct 28 06:38:35 btovm871 last message repeated 2 times Oct 28 06:38:38 btovm871 pcscd: winscard.c:304:SCardConnect() Reader E -Gate 0 0 Not Found Oct 28 06:38:38 btovm871 last message repeated 3 times
  • 22. Repeated messages will be logged in messages logfile as “last message repeated n times”. The above example searches for the line which has any number (0to9) followed by the word “times”. If it matches it displays the line before the matched line and matched line also. With in the square bracket, using hyphen you can specify the range of characters. Like [0123456789] can be represented by [0-9]. Alphabets range also can be specified such as [a-z],[A-Z] etc. So the above command can also be written as $ grep -B 1 "[0-9]+ times" /var/log/messages.4 Example10. Exception in the characterclass If you want to search for all the characters except those in the square bracket, then use ^ (Caret) symbol as the first character after open square bracket. The following example searches for a line which does not start with the vowel letter from dictionary word file in linux. $ grep -i "^[^aeiou]" /usr/share/dict/linux.words 1080 10-point 10th 11-point 12-point 16-point
  • 23. 18-point 1st 2 First caret symbol in regular expression represents beginning of the line. However, caret symbol inside the square bracket represents “except” — i.e match except everything in the square bracket.