



(9 ratings)
Grep
is by far the most popular command that exists in Unix. Though
some may argue about that, but once you begin using grep, it
would always be present in all your complex commands that you
think of executing at the shell prompt. grep stands for 'global
regular expression printer' . Which makes no sense to most..
In sensible words grep extracts those lines from a given text
that match the conditions set by the user.
Basically grep lets you enter a pattern of text and then it
searches for this pattern within then text that you provide
it. It would return all the lines that have the given pattern
in them. grep can be used in 2 ways - Either on its own or along
with pipes
Using grep on its own
$ grep '12.00' /home/david/backup/log.txt
This command basically shows how you can use grep to extract
lines containing a particular string from a text file. (Text
files need not necessarily end in .txt) The above command searches
for the string 12.00 in the text file specified in the command,
and displays all the lines that have this string in them.
The above command could be used to find out all the backups
that took place at 12.00 (In case you have a log.txt file in
that directory with a list of all the timings for the backups
that you have made).
$ grep -v '12.00' /home/david/backup/log.txt
The above command would now show you all the lines in the text
file except those that have the string 12.00 in them.
$ grep -l 'delay' /code/*.c
The above command searches for those files that end with a '.c'
(within the /code directory) and in which the text 'delay' is
present. It only returns the names of these files and not the
lines where it found the string.
$ grep -w '\<bay' *
$ grep -w 'watch\>' *
The above commands search for text in a more refined way.
The first command searches for those lines where any word in
that line begins with the letters 'bay' and the second
command searches for those lines where any word in that line
ends with the letter 'watch'
-
Using grep with pipes
$ ls -l | grep rwxrwxrwx
As you must be knowing ls -l displays the directory listing
for any directory. The grep rwxrwxrwx part of the command extracts
only those lines which display the files having their read,write,execute
permissions set for user, group and others also. Thus instead
of getting a listing of all the files in the directory, you
would only see those files that have their r,w,x permissions
set for all everybody.
The output of grep can also be piped to another program as follows
$ du | grep 'mp3' | more
You should be able to figure out what the above command does..
$ grep '^#' /home/david/script1 | more
The above command would display those lines (from the file /home/david/script1)
that begin with a '#'. The term '^#' means that # should be
present as the first character on a line. The more part
of the command should be known to you. If not, more basically
displays the output a page at a time incase the output exceeds
one page.
$ grep -v '^[0-9]' /home/david/backup/log.txt | more
This command searches for lines having any of the numbers from
0-9 in them as the first character on the line. It then prints
all the lines except the ones it found initially.
Important : It's necessary to enclose patterns (as used
in the above 2 commands) in single quotes so that the shell
understands it correctly.Otherwise, the shell may interpret
it in another method.
Some extra options for grep
-v
Reverses the normal behaviour of the grep command - Instead of selecting lines, it rejects the lines that match the given criteria.
-c
It supresses the normal output and only prints the total count of matching lines instead of the actual lines.
-i
Ignores the case of the text when matching the given pattern.
-w
Checks if the given pattern is a word by itself and not a part of another word. Thus if you search for 'bay' and the word 'baywatch' is present in a file, the particular line conatining that word would not be returned in the result.
-l
Only gives the names of the files in which the given pattern was found.
-r
Checks for the given pattern , recursively within the directory that you specify after the -r option
I hope this tutorial helps you get started with grep. grep is defintely one of the tools that gives Linux the advantage over other Operating Systems. Using grep effectively along with other tools gives the user a lot of power in Unix.
20 Random Tutorials from the same category :
What are the SUID, SGID and the Sticky Bits?
How to edit and understand /etc/fstab
Installing software from source in Linux
Redirecting standard input and output
Unix And C/C++ Runtime Memory Management For Programmers
Manipulating files in Linux
Basic Graphics Programming With The Xlib Library
Wildcards, Quotes, Back Quotes and Apostrophes in shell commands ( * ? [] " ` ')
Moving around in the Linux file system
Linux keyboard shortcuts
How to find files in Linux using 'find'
Parallel Programming - Basic Theory For The Unwary
Manipulating directories in Linux
Accessing User Information On A Unix System
Building And Using Static And Shared "C" Libraries
How to change a file's owner and group in Linux
How to mount filesystems in Linux
Access Windows partitions from Linux
Windows COM Ports equivalent in Linux
What's a window manager?













