HowTo: Use grep Command In Linux / UNIX [ Examples ]

by Vivek Gite on August 2, 2007 · 174 comments

How do I use grep command in Linux and Unix like operating systems? Can you give me a simple example of grep command?

The grep command searches the given file for lines containing a match to the given strings or words. By default, grep displays the matching lines. Use grep to search for lines of text that match one or many regular expressions, and outputs only the matching lines.

The name, "grep", derives from the command used to perform a similar operation, using the Unix/Linux text editor ed:
g/re/p

grep Command Syntax

grep 'word' filename
grep 'string1 string2'  filename
cat otherfile | grep 'something'
command | grep 'something'
command option1 | grep 'data'
grep --color 'data' fileName

How Do I Use grep To Search File?

Search /etc/passwd for boo user:
$ grep boo /etc/passwd

You can force grep to ignore word case i.e match boo, Boo, BOO and all other combination with -i option:
$ grep -i "boo" /etc/passwd

Use grep recursively

You can search recursively i.e. read all files under each directory for a string "192.168.1.5"
$ grep -r "192.168.1.5" /etc/

Use grep to search words only

When you search for boo, grep will match fooboo, boo123, etc. You can force grep to select only those lines containing matches that form whole words i.e. match only boo word:
$ grep -w "boo" /path/to/file

Use grep to search 2 different words

use egrep as follows:
$ egrep -w 'word1|word2' /path/to/file

Count line when words has been matched

grep can report the number of times that the pattern has been matched for each file using -c (count) option:
$ grep -c 'word' /path/to/file
Also note that you can use -n option, which causes grep to precede each line of output with the number of the line in the text file from which it was obtained:
$ grep -n 'word' /path/to/file

Grep invert match

You can use -v option to print inverts the match; that is, it matches only those lines that do not contain the given word. For example print all line that do not contain the word bar:
$ grep -v bar /path/to/file

UNIX / Linux pipes and grep command

grep command often used with pipes. For example print name of hard disk devices:
# dmesg | egrep '(s|h)d[a-z]'
Display cpu model name:
# cat /proc/cpuinfo | grep -i 'Model'
However, above command can be also used as follows without shell pipe:
# grep -i 'Model' /proc/cpuinfo

How do I list just the names of matching files?

Use the -l option to list file name whose contents mention main():
$ grep -l 'main' *.c
Finally, you can force grep to display output in colors:
$ grep --color vivek /etc/passwd
Sample outputs:

Grep command in action

Grep command in action


If you enjoyed the grep tutorial, then you might like to read our "Regular Expressions in Grep" tutorial.

This FAQ entry is 1 of 7 in the "Linux / UNIX grep Command Tutorial" series. Keep reading the rest of the series:
Share this with other sys admins!
Facebook it - Tweet it - Print it -

{ 174 comments… read them below or add one }

1 Ivan June 16, 2008

I found this tutorial being the most clear and helpful one. Thank you.

Reply

2 Sandeep October 18, 2010

for searching multiple string using GREP command, please use below commands

grep -ir ‘string1\|string2′

Reply

3 Jeyaram May 10, 2011

above command is not working, instead

grep -ir “string1\|string2″ dir_name

Reply

4 manik sikka November 25, 2008

This Tutorial is so far helpful to me.

Thank you..!!

Reply

5 turbolinux December 12, 2008

what if i want to search keyword
like “$this->Products” or “['status']” ?

grep -R "['status']" 

doesnt work

Reply

6 Vivek Gite December 12, 2008

Try

grep -R "\['status'\]"  filename

Reply

7 Arunkumar December 26, 2008

this is very useful to me.. thanks …

Reply

8 Vikram January 30, 2009

Very helpful. saved my time.

Reply

9 Domino March 18, 2009

What is the best way to grep recursively through a directory tree, and display the pattern matches, that occur in just all the *.cpp files?

For example:

grep -HRn “look for this” *.cpp

doesn’t work (on Linux)

Reply

10 nRon May 16, 2011

You could try

grep -r –include=”*.cpp” ‘look for this’ .

(“.” is current directory)

Reply

11 eswar March 23, 2009

what if i want to search like this

Reply

12 Tauqueer March 25, 2009

Hi
I want to search t1.spq, t2.spq ….. tn.spq words from a file
grep -i “*.spq” filename doesn’t work
Please tell how can search such words??

-Regards,
tauqueer

Reply

13 Mohanraj October 24, 2011

Hi,

you can try out the below command..

grep -i ^t..spq filename

Best regards,
Mohanraj

Reply

14 eswar March 25, 2009

avoid using * grep -i “spq” tt.sh
then you will get all the words which will have spq.
if some thing need to refrained from that need to get the desired out put then use

grep -i “spq” tt.sh | grep -v ” somepattern”

Reply

15 Humphrey April 25, 2009

How can i grep for an output that come after a statement: eg Expires: 10/May/2009.

If i want to caputure only the date, how can i grep for what comes after the colon (:)

please help

Reply

16 Vivek Gite April 25, 2009

Try,

echo 'Expires: 10/May/2009' | cut -d: -f2
OR
echo 'Expires: 10/May/2009' | awk -F':' '{ print $2}'

Reply

17 Rizvana April 29, 2009

This is quite informative…… Thanks.

Also I have a question, what is the expansion of ‘grep’? Can anyone answer?

Reply

18 Ravi April 30, 2009

This helps a lot,,

Reply

19 Humphrey May 2, 2009

Rizvana,
grep means Get Regular Expression and Print

Reply

20 Humphrey May 2, 2009

How can i do calculation on dates;
eg to know the number of days between ‘todays date’ and a day like ’15/may/2009′

please help

Reply

21 divya May 4, 2009

thanks .i gt the rite information.

Reply

22 Blury May 11, 2009

Hi,
How can I use grep function to search files that file name with “ord” or “rec” from specific dir??

Reply

23 Sandeep August 2, 2010

grep -ir “ord\|rec” filename

Reply

24 kandida June 2, 2009

Hi
lets say i have some data :
a
a
a
b
b
b
c
c
c
can I use grep comand to make like this :
a
b
c
thanks

Reply

25 Vivek Gite June 2, 2009

Try uniq command.

Reply

26 Sandeep August 2, 2010

grep -ir “a\|b\|c” filename

Reply

27 kandida June 2, 2009

Vivek,
its working…..thanks a lot

Reply

28 Blury June 3, 2009

Hi,
No one know how to use grep function to search files that file name with “ord” or “rec” from specific dir??

Reply

29 Vivek Gite June 3, 2009

Try

cd /dir/to/search
grep "word" ord*
grep -R "word" rec*

Reply

30 snake June 10, 2009

Hi,
I’d like to get the total cpu and memory usage easily and I think of using ‘dstat’ command. Can I get the values corresponding to the free and used column with grep?

------memory-usage-----
used buff cach free
153M 876k 24M 4392k

cheers!

Reply

31 Nazeem S June 22, 2009

The Most Helpful POST

Reply

32 Thomas K June 26, 2009

For those who want to search files with wild cards and the like, try the find command with -exec. find /dir/to/search/ -iname *.cpp -exec grep 'word' '{}' \;
and snake, I do not think it is possible to search columns with grep, I’m 98% sure that it is line (row) only.

Reply

33 sankar July 10, 2009

As i was i beginner , it helped me a lot . I would like to thank all the people who contributed it to the public … than you so much

Reply

34 manavi July 25, 2009

whats the use of egrep and fgrep
give examples of both

Reply

35 Vivek Gite July 25, 2009

egrep is for regex and fgrep is for fixed string. I will update FAQ with more examples.

Reply

36 SANA August 2, 2009

this is the best and the most understandable tutorial i have seen till date.
GOOD WORK!!

Reply

37 Patrick August 7, 2009

This tutorial is very easy to follow and enabled me to learn so much within a very short time

Reply

38 prathamesh August 7, 2009

hi this is really really helpful and very fast introduction for grep very nice

Reply

39 harshal August 8, 2009

exact and accurate content with no irrelevent text..

Reply

40 Rob August 11, 2009

clean and accurate .thanks

Reply

41 Syed August 16, 2009

Can someone help me for a data like:

aa:abc
bb:def
cc:ghi
dd:ijk

aa:lmn
bb:opq
cc:
dd:uvw

aa:pqr
bb:stu
cc:vwx
dd:yza

Description of data:
aa, bb, cc, dd comprise one record. Blank line is dividing 100 of such records.
question1) How to grep “cc:” that is empty value? i am unable to do this because it gives all the values.
question2) I need to print value of “aa:…” for all the records whose “dd:uvw”. How to do this?

Reply

42 jyothi September 17, 2009

hi all..
can anyone please explain me about this command
ps -ef|grep -v grep|grep $orasid >>/dev/null

Reply

43 learner September 22, 2009

ok..i feel really dumb..but i got this task i have to do to find a hidden file or something like that and im pretty sure i would use the command ls or whatever.
my problem is i dont no what im doing at all here..were do i type the command in at? all these things jus teach u the commands. yea im dumb i dont have a clue were to type it in..
if someone could please help me out here it be much appreciated! thanx

Reply

44 jyothi September 23, 2009

hii..
It goes something like this..
i want to list a oracle database instance (say orasid=tiger) using this command..
I issued each command in separate and could understand little bit..
1. ps -ef :: lists all running processes
2. the output is directed to “grep -v grep” now
3. what that command does is just filter out any text containing ‘grep’..
4. this output is now sent to “grep $orasid”
5. it will just fetch only those running process like ” tiger ”
6. the output is redirected to /dev/null where the output is just discarded..
after this command here they used
if[ $? -ne 0]
then ————–
else —————–
fi
where $? reads output of previous command…
here $? is 0 as the command hasn’t thrown any error

Reply

45 AKHIL September 23, 2009

VERY HELPFUL

Reply

46 Samer September 27, 2009

Dear All ,
Thnaks for this nice chart it helps me a lot .
1- If i need to search for a “word” inside a directory that holds files, these files are located in the “www”
2- Also to search for a “word” in the all the databases in : /var/lib/mysql/database

Thanx all

Reply

47 ed September 27, 2009

What is the grep command to find a string of charactes like below

KY 41099-1000

I am just using KY as an example but I want the command to list any state abbreviations followed by a 9 digit zip code. Any help is appreciated

Reply

48 nitin September 30, 2009

@ed
use
# grep ^[A-Z][A-Z] [0-9] [0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]$ filename

i hope it work………

Reply

49 faiz_zaidy October 3, 2009

please solve my query
my query is “how can i search the text in hole file of a particular dirctory”

Reply

50 Sam October 18, 2009

Hi i wud like an explanation of the ff command
grep[a-g]…[r-z]text.txt

Reply

51 Mukesh October 25, 2009

This Tutorial is very helpful to me.

Thanks….!!

Reply

52 dev November 11, 2009

@ Syed:

** answer1 **
cat file | grep '^cc:$'
will produce only cc: with no value.
Learn regular expressions. In the command above regular expression is between ”. So… cat is normal command that prints file. Then result is piped (|) to grep, which processes it with regular expression (^cc:$).
This regex basically matches lines, which contain:
^ – beginning of the line
c – letter c
c – letter c
: – colon
$ – end of line
If there is something between colon (:) and end of line ($), in your case some value, then line is not produced by grep.

** answer2 **
How to check value of aa: in the record which contain dd:uvw?
cat file | grep -B3 'dd:uvw'
-B3 tells grep to show line that matches our pattern and 3 lines Before (you can change this number if you want, you can use -A4 to show 4 lines After).
So the command above will produce whole 4 line of each record, which contain dd:uvw. To show only lines with aa: and their values, we can simply add subsequent grep:
cat file | grep -B3 'dd:uvw' | grep 'aa'
…and that’s it.

Reply

53 dev November 11, 2009

@Sam
grep [a-g]…[r-z]text.txt
will match files which names start with a,b,c,d,e,f or g, then there are subsequent three characters – each dot (.) represent any character – then there is r,s,t,u,v,w,x,y or z and then text.txt.
So it can be:
bokkrtext.txt
aiiiztext.txt
and so on…

Reply

54 dev November 11, 2009

@ jyothi
ps -ef|grep -v grep|grep $orasid » /dev/null

Explanation:
ps -ef lists processes. On that list there is number of every process, even number of grep process executed in this line. For example if i try to grep non-existing process john by issuing command ps -ef | grep john, then i will get this:
dev 6271 5933 0 05:43 pts/0 00:00:00 grep john
Even if there is no process I am looking for, I will get result from grep. I don’t want that to happen, so I will have to grep invert match (grep -v pattern as explained in the howto above).
In other words ps -ef | grep -v grep will list processes excluding grep.

After next pipe you have:
grep $orasid
$string recalls value of variable defined before.
If you define $orasid=bob, then your command will be equal to:
ps -ef | grep -v grep | grep bob » /dev/null
If $orasid=william, then your command will be equal to:
ps -ef | grep -v grep | grep william » /dev/null
and so on…

» /dev/null redirects output of the command to nowhere, because we don’t want to see grep output on our screen, when executing the code.

Summarizing:

$orasid=tiger
...
ps -ef | grep -v grep | grep $orasid >> /dev/null
...
if [ $? -ne 0]
then echo 'claws'
else echo 'no claws'
fi

If there is process named tiger (output of grep is not empty), then we get claws, else we get no claws :)

Reply

55 marlenchen November 16, 2009

How can i search users, who can sign in in the system, with the grep commando?

Reply

56 swarna December 1, 2009

very useful to me..

Reply

57 parveen dabas December 3, 2009

i found this tutorial really helpful…
well i hv one doubt…
if i have two files, namely..
cat >file1
1
2
3
4
cat >file2
1
2
Now wat command and iptions to use if i want only 3 and 4 as output i.e.
only those lines which are not present in file2 wen compaed to file1… plz help….

Reply

58 krishna December 3, 2009

Simply super ,,,thanks

Reply

59 Shan December 14, 2009

This is great article , i am using the windows Grep editor, I am search the text content \”*hello*\” to get the world hello in all the files. I didnt get any output . Could suggest me what i should use.

Reply

60 parveen dabas December 15, 2009

Reply to Shan
wel u can use
grep -iw hello filename
if two words ex. Hello and
Hi, use foll syntax
egrep -iw ‘hello|Hi filename

Reply

61 Ram January 12, 2010

Please do explain, what do the values between colons represent? For example:

grep video /etc/groups

video:x:33:rtalkad

Reply

62 Vivek Gite January 13, 2010

See /etc/group file format.

Reply

63 hammy January 25, 2010

How to count total number of lines using shell script..????

Reply

64 Runal January 28, 2010

Hi
I have an outstanding issue with me…
i know the specific pattern in the file but dont know the name of the file/script and dont know the location either.
How to search the filename with simply the pattern in that file.

Actually at some xyz location a .dmp file gets created (xyz.dmp (everyday it creates the same file as it a daily backup.))…now i dont know which script creates this .dmp file…So i need to know the name of the script.

Reply

65 Marco January 30, 2010

Well, I didn’t found an answer, maybe you can help me.

I look for something like:

grep “[string a] AND [string b]” (print all lines who include [string a] and [string b])
grep “[string a] OR [string b]” (print all lines who include [string a] or [string b])
grep “NOT [string a]” (print all lines except [string a])

Reply

66 Salman January 30, 2010

@Hammy

In order to count “words” , “characters” and “lines” in a file there is a bash command called “wc”.

example:

wc -l < filename
or
cat filename | wc -l
will count number of lines in file named "filename"

wc -w < somefile
cat somefile | wc -w
will count number of words or strings in the file named "somefile"

wc -c < somefile
cat somefile | wc -c
will count number of characters in the file named "somefile"

cheers!!

Reply

67 esakki February 11, 2010

How can i found system ip with mac address using grep command, pls tell anyone.

Reply

68 my11 February 22, 2010

how do u run a grep cmd to exclude multiple lines from a file and write remaining lines to a file?

Reply

69 naveen.divi February 25, 2010

this is tutorial is very helpful for me.

thanks a lot.

Reply

70 linu February 25, 2010

REALLY GREAT BLOG!!1

Reply

71 novice March 3, 2010

hi, I am trying to to something like this…

filename_$CLIENT_NUMBER_sapphire_$DATE.var
filename_0_sapphire_20102002.var
filename_1_sapphire_20102002.var

filename_22_sapphire_20102002.var
filename_23_sapphire_20102002.var

so i wanna get a list of all these vars that are set for a certain day for all the client_number(0 to 24)… in an ordered fashion.

set | grep 20102002 | grep filename_ — gives me the 0 file and then 10, 11… and then the 1, 2 (filename_0_sapphire_20102002.var)

i have tried sort and got no results. Please can u help.

did this too:
set | grep 20102002 | grep filename_ ‘[0-9]‘ — and get only 0 to 9 vars… how do i get 0 to 23 in order.

Thanks!

Reply

72 dillip kumar jena March 12, 2010

really it is very help ful to me.

Reply

73 SNW March 16, 2010

How you go about listing user and last day of access ?

Reply

74 Rutvik March 31, 2010

Hey,
I have a question. I have two files and I want to compare the files in such a way that it takes the data that is in file 1 and searches in file 2 and returns me items it did not find. (file 2 has more/newer data). I tried this command but it doesn’t look like it is working.

grep -v -f Currentsttuf.txt newstuff.txt> difference.txt

Reply

75 Ankur April 2, 2010

Very clearly explained… thanks!

Reply

76 vikas kumar May 7, 2010

very good ………………
please send me useful shell programing in my mail..
vikas kumar

Reply

77 Pam July 8, 2010

my script:

for f in ‘cat all_logs0708′;
do
echo $f
grep ‘ZYXzyx’ $f >> all_out
done

I’d like to have the $f value prefixed on each output line. Is this possible?

Reply

78 karthik July 9, 2010

How to find the files accessed in last 3 days using a grep command.

Reply

79 Catherine July 12, 2010

what if i want to exclude a certain word, for instance ‘prism’
This what I have so far:
grep -i ‘ism$’ /usr/dict/words

i want it to list every word that ends in ‘ism’ but would like to exclude ‘prism’
i only want to use one grep.

Reply

80 Alima July 14, 2010

I have 2 files. File1 contains a list of long-strings with their corresponding informations. File2 contains portions of the strings (short-strings) found in file 1. I would like to find which “short-strings” within file2 is present in file1 and extract the corresponding information. The ideal output file should be short-strings + long-string + corresponding information. Please help… Thanks in advance

Reply

81 krasaviza July 28, 2010

Hi xD
I have a problem with grep -v. I want to exclude a line and the 6 lines before it, so I tried
|grep -v -B6 ‘my text’ but that doesn’t work, only without the -B6.
But how else can i exclude the other lines in quite a simple way because i need this option many times :S ?
Please help me

Krasaviza

Reply

82 Bhavin Vyas August 18, 2010

I have a data like
:
** SPFS310 LED is on
LED is on: MB . See prtdiag -v and /var/adm/messages for more details.
cbm850=TCS-CBM2;NODE=TCS-CBM2-unit0;CLASS=HW;HWTYPE=SYSBOARD
Mon Aug 9 11:05:50 2010

* APCL303 Trouble condition asserted.
Communication with the Core is not established
cbm850=TCS-CBM2;NODE=TCS-CBM2-unit0;CLASS=APPL;APPLTYPE=SDM_BASE.logs:s
tart_sdmlaq
Tue Aug 10 04:38:30 2010

I want to display the paragraph which contains ** i.e my output should be
** SPFS310 LED is on
LED is on: MB . See prtdiag -v and /var/adm/messages for more details.
cbm850=TCS-CBM2;NODE=TCS-CBM2-unit0;CLASS=HW;HWTYPE=SYSBOARD
Mon Aug 9 11:05:50 2010

What command should I use.Can anyone please tell me.

Reply

83 rahul August 29, 2010

How me difference between egrep and fgrep and how to use these commands

Reply

84 sujith September 8, 2010

Try the below shell programs.

1. Locate build.number in the input file. Get the value and increment the value to next number for every run.
2. Have a some parm=value in input file. From shell read these and use it in the shell, pass it to another shell.
Take two file that have parm=value. From source file copy all the parms that exists in another file (target) with the values retrieved from the source file

Reply

85 Cletus September 10, 2010

I hope this doesn’t sound silly. How do I eliminate a directory from a grep search? Let’s say I want to look for the word “hamburger” that exists somewhere is a file in a subdirectory. I want to recursive search but I want to eliminate one of the subdirectories from being searched. To search I would normally do something like #grep -r hamburger /var/www/* But let’s suppose that /var/www/waterpipe is 2 TB in size and I don’t think hamburger is in there anywhere. How do I search everything else in /var/www/* but not /var/www/waterpipe? MANY thanks.

Reply

86 priya September 14, 2010

plz tel me the command to fetch a line from a file where the 5th col states a particular word like say “YES”

Reply

87 Geeta October 1, 2010

Hi Vivek,
I have a concerns how to use grep for the following
1. In a file of 100 lines how to get contents from line number 75 to 90?
2. Cut lines in a file with index numbers 6, 7, 10, 11
3. Print lines with index 70 to 95 from a file using head and tail.

Anticipating u r reply
Thanks a lot

Reply

88 manish June 15, 2011

3) head -90 filename | tail -25

Reply

89 Pradeep October 2, 2010

grep “^t[0-9].spq” filename

Reply

90 Geey Matlola October 5, 2010

that was so helpful, I now understand how does grep command works. now what soes this rilly specify “ps -ef | grep”

Reply

91 Erik October 7, 2010

Hi to all,
I just started to learn linux a month ago
Can I extract 2 to 6 letter words from a text file using one grep command only!
To mention that each word is on its own line
what’s the grep command to do this job?
I tried any combination of grep and not the result which I am looking for

Reply

92 Geey Matlola October 7, 2010

someone reffred me the “man grep” command it rilly helped me to understand it.

Reply

93 Tommy K October 7, 2010

How do I copy a text file but remove any blank lines held within that text using egrep?

Reply

94 kuldeep October 18, 2010

Hi,
i want to search path for file which has a no say ’7000000000′ in a server , how i can do this ??
please help

Reply

95 innocentfornow November 5, 2010

I’ve got to list up all files that located in a folder like /usr/local/somefolder
to see every file it uses an absolute path for a command like

require once /some path/some file

for example
so I need a wildcard showing all files that uses all commands dealing with
absolute paths
for managing a migration to another platform…

Reply

96 Ron November 9, 2010

i need to get the last line from a match with grep although there are multiple matches
Thanks for the tutorial, i learnt a lot

Reply

97 Excellent Apps November 25, 2010

Great post. Very Helpful.

Reply

98 girlatromance December 2, 2010

Wow. This is exactly what I was waiting for.

Reply

99 hoxy December 15, 2010

I have files as below:

contents in ‘tempFile’ file
===================
file1.bak.p
file1.p
abcd.h
abcd.bak.h

how do I search only for the non “.bak: file?

I tried as below but not working

grep -v ‘.*\..*\.[a-z]*’ tempFile > tempFile2

Reply

100 hoxy December 15, 2010

actually I need to seach for words that only has one occurance of “.”

as such, ‘abcd.bak.h’ has two “.”

Reply

101 vikbenq January 5, 2011

how can i grep logs using today’s date or say last 24 hours.

for ex: grep “logs” messages | grep “Jan 5″ — i can find logs for Jan 5 using this syntax but I want to use this in a script where I don’t have to use the date every time instead use something like 24 hours

Reply

102 Armand January 11, 2011

I know that it should work like this….

grep error /home/armand/Documents/errors.txt

but how do i ignore the ‘shutdown_error’ grep?

Reply

103 Gaurav Saxena January 25, 2011

This is Gaurav..

Plz tell about:-
$ grep -l”`echo ‘\t’`” foo

here foo is a file name….

thank u…

Reply

104 Gaurav Saxena January 25, 2011

now i can reduce my time in study,by using this website….
thanks for that…

Reply

105 Manu February 2, 2011

Hey that colour thing is not working on my machine….?

Reply

106 Marie February 13, 2011

How can we grep for patterns in an Arabic file? When I type the pattern to look for, it shows nothing. The file is in Arabic script, but the search on command line does not show that search string?
Can we read the binary file and search for a particular pattern there? Is there any website/ tutorial on using grep with Arabic script?
Thanks

Reply

107 Dinesh February 22, 2011

Dear all,
i have a folder consisting of some hundred txt files.Each file has a description about 10 lines ,then followed by six columns and more than 500 rows.My job( for each txt file) is among the six columns i have to search the string(contains numbers) in the second column ,if there is any matches in any row ,then in the output file i want the few specified lines in the description followed by the row which matches the string.so atlast i want single file which contains the desription of the file as well as the rows that matched the string.Thanks in advance..

Reply

108 Vani February 23, 2011

How to search any string or filname in all the sub-directory starting with same word. Example :
i need to search the word = ‘dataload’ in all the sub-directory which starts with ‘data2011′ in dir: DATA.
Where DATA directory has following sub-directory = data2010Jan, data2010mar, data2010july, data2011jan, data2011aug, data2009dec

Reply

109 Armand Groenewald February 23, 2011

you would use

grep -r dataload /?folders/DATA/data2011*

Hope that helps :)

Reply

110 Armand Groenewald February 23, 2011

if you want the results to go into a text file
use

grep -r dataload /?folders/DATA/data2011* > results.txt

then you can nano results.txt or vi results.txt or what ever program you want to use…

:)

Reply

111 Pascal March 3, 2011

I need to know how can i used the line that contain word “accused” without regarding for upper or lower case.using “greb command.
example: greb “accused” file

Reply

112 mikewolf March 5, 2011

grep -i “accused” file

Reply

113 murugesh March 13, 2011

How do i search a string in two files.

Reply

114 N.Srinivasan March 13, 2011

If some can tell about how to search a particular srting in directory and its sub Directories, It would be of great help!!!!!!!!!!!

Reply

115 huisan March 18, 2011

HI, I wish to ask on how to use grep to produce the output result as below. Thank you very much

Input
FEATURES Location/Qualifiers
source 1..94601
gene 1..2685

Output
FEATURES Location/Qualifiers
source 1..94601

Reply

116 type8code0 March 20, 2011

@murugesh March 13, 2011
How do i search a string in two files?

Try

cat file1 file2 | grep string

Reply

117 type8code0 March 20, 2011

@N.Srinivasan March 13, 2011
If some can tell about how to search a particular srting in directory and its sub Directories, It would be of great help!!!!!!!!!!!

Try

grep -r string /dir/

Reply

118 arul March 28, 2011

Hi,
I use a grep command to search a file.
That ouput is sent to a folder.
Since there are no space in the server, its showing an error like no space in desk

Any possibility of zipping the output of Grep command before writing to disk?

Reply

119 Nayabrasool April 18, 2011

Pretty good description thank you

Reply

120 Heman April 21, 2011

How do i grep for lines containing a specific string, say “forrest”, while not containing another string “gump”?

Reply

121 neeraj April 24, 2011

There is a variant of grep known as gzgrep to search for a term in the argz archives.

Reply

122 Besso April 27, 2011

Consider the file data.txt which contains the following data (MSISDN, credit, status, error_code, location_id) in the below format
MSISDN,Credit,Status,location_id,Error_code

0123318739,13213,A,300,abcde
0120123456,3423,C,200,xcvfe
0120453576,5563,A,201,fgsa
0110445654,3000,A,400,gcaz
0120432343,3000,A,402,dewa
0129423324,3000,A,206,dea
0104323433,3000,A,303,a
01232132134,3000,A,200,a
0122344242,4233,N,204,ghfsa
————————————————–
my question is how can i perform the follwing query
Try to have a command that can match all the below criteria

• MSISDNs range between 01201xxxxx to 0122xxxxxx
• And have credit over 3000
• Status either A or N
• location_id contains letter ‘a’
• Error_code starting with 2

The output of the command you will use when applied on the above file should be

0120453576,5563,A,201,fgsa
0122344242,4233,N,204,ghfsa

Reply

123 Besso April 28, 2011

please i need your reply urgently
ahanks in advance
=================
Consider the file data.txt which contains the following data (MSISDN, credit, status, error_code, location_id) in the below format
MSISDN,Credit,Status,location_id,Error_code

0123318739,13213,A,300,abcde
0120123456,3423,C,200,xcvfe
0120453576,5563,A,201,fgsa
0110445654,3000,A,400,gcaz
0120432343,3000,A,402,dewa
0129423324,3000,A,206,dea
0104323433,3000,A,303,a
01232132134,3000,A,200,a
0122344242,4233,N,204,ghfsa
————————————————–
my question is how can i perform the follwing query
Try to have a command that can match all the below criteria

• MSISDNs range between 01201xxxxx to 0122xxxxxx
• And have credit over 3000
• Status either A or N
• location_id contains letter ‘a’
• Error_code starting with 2

The output of the command you will use when applied on the above file should be

0120453576,5563,A,201,fgsa
0122344242,4233,N,204,ghfsa

Reply

124 Dinesh April 29, 2011

Try this i got correct output.
$grep -w ’012[0-2][1-9][0-9][0-9][0-9][0-9][0-9]‘ filename |
grep -w ‘[3-9][0-9][0-9][0-9][0-9]‘ |
grep -v -w ’3000′ |
egrep -w ‘A|N’ |
grep -w ’2[0-9][0-9]‘ |
grep ‘a’

Reply

125 Dinesh April 29, 2011

important change : change the first line into following two lines :
$grep -w ’012[0-2][0-9][0-9][0-9][0-9][0-9][0-9]‘ filename |
grep -v -w ’01200[0-9][0-9][0-9][0-9] |

Reply

126 Besso April 29, 2011

Thanks alot you are genuios
some of the lines worked normally but when I tried to combine them it gives me error so all iam asking is to give me the whole bulk of code to run it in one sentence. Thanks again man you are really a life saver
BR,
Besso

Reply

127 Dinesh May 5, 2011

hi..,i m not getting getting exactly what u r asking ..? they are all piped ones../
u write all these in .sh file then run…also u want to use these code for single files or multiple files..?

Reply

128 swapnil May 4, 2011

question : i want to find only the directory in a particular directory.so what is the command in linux to do so.pls help

Reply

129 neeraj May 5, 2011

@swapnil:
find -type d

Reply

130 Divya May 17, 2011

Hi,

i want to move few file from one location to another. there is no pattern except for one -> “05_ _2011″. these two underscores can be any number. i am not able to move or do a grepfor this pattern.

Please help.

Reply

131 Dinesh May 18, 2011

let /home/user/folder be the direcrory contains .txt(or any other extensions) files.Some of these files contains the string ’05_ _2011′.We find those files which contains the string ,and copy files to a new location.
Save the follwing code as program.sh file
———————————————-
#! /bin/bash
grep -l ’05[0-9][0-9]2011′ *.txt |
while read line
do
cp /home/user/folder/$line /new/path
done
—————————————-
the files will be copied to a new path with a same file name.
hope it helps.

Reply

132 faizan May 20, 2011

its a very helpful for me, thank u
Regards,
Faizan Khan
Pakistan Karachi

Reply

133 Gobinda June 13, 2011

How to grep a log file
from 07-JUN-2011 01:13:00 to 09-JUN-2011 15:03:04

my date format is 07-JUN-2011 01:13:00

Reply

134 Dinesh June 13, 2011

$grep ’0[7-9]\-JUN\-2011′ logfile

if we specify time, we need to filter more with grep,that makes code difficult and writing lots of lines.Instead get the list for three days, delete the contents before 07-JUN-2011 01:13:00 and after 09-JUN-2011 15:03:04 in a notepad.
Hope it helps

Reply

135 Gobinda June 13, 2011

its a very helpful for me, thank u
Regards,
Gobind

Reply

136 matias June 29, 2011

why are all tutorials incomplete?

Reply

137 Vivek Gite June 30, 2011

What are you talking about?

Reply

138 shihab June 30, 2011

Hi,

This helps a lot, Could you please explain grep command.

” ls -l | grep -a “^d” | tee dir.lst | wc -l “

Reply

139 Vivek Gite June 30, 2011

The grep will get only name of directories from the ls -l output.

Reply

140 Ihab July 8, 2011

How can I grep for 2 strings (string1 and string 2) in 2 log files: log1 and log2 in one command? I also need to show 3 lines before and 3 lines after each string.
Thanks in advance.

Reply

141 Dinesh July 11, 2011

for the first step you use the following command
$ cat log1 log2 | grep ‘string1.*string2′
I didn’t get the appropriate meaning for ’3 lines before and 3 lines after each string’
hope it helps

Reply

142 Dinesh July 11, 2011

for the first step you use the following command
$ cat log1 log2 | grep ‘string1.*string2′
I didn’t get the appropriate meaning for ’3 lines before and 3 lines after each string’
hope it helps

Reply

143 Ihab July 11, 2011

Dinesh,
Thanks for your reply. What I am trying to search for is a log with multiple daily entries. One log may contain many days worth of entries. One day of log entry can be located in 2 different logs (log1 and log2). For example:

1) Let’s say that I want to search all the log entries of July 1, 2011 that are located in log1 and log2.
The first string in the log entry is the date which has the following format: 2011-07-01 and the second string which can be anywhere in the same log entry: ‘transaction failed’ or ‘error’ or ‘unsuccessful’.
So string1 = 2011-07-01 and string2 = ‘transaction failed’ or ‘error’ or ‘unsuccessful’.
2) Each log entry can be up to 6 lines long. Log entries are seperated by 1 blank line and another line says: END OF ENTRY. I believe grep command would only display the line that contains both strings (string1 and string2) but I would like also to display the whole log entry that contains both string1 and string2 if possible.

Regards,
Ihab

Reply

144 ROHIT July 11, 2011

I have to search for two words..for ex animal …after it is present i need to search for dog …Basically i have to AND both the terms…suggest me the command?

Reply

145 anoop July 26, 2011

hi rohit
u can use pipelining command
for example
suppose ur file name is animal_list
then u give a command like this
cat animal_list | egrep -i ‘ex | animal’ | grep -i ‘dog’

Reply

146 Gobinda July 15, 2011

In RHEL 4 update 8 RAM is 16GB what will be the suggested SWAP and kernel parameters for running oracle 10.2.0.3

Reply

147 anoop July 26, 2011

very intresting and good way.. thanks

Reply

148 naveen July 27, 2011

this is useful everyone

Reply

149 kintelk July 29, 2011

hi

this site is very hopeful to me !
thanks to this website , i can lean the grep command esilry~
bye. i will expect more precious info .

Reply

150 rajasekhar vinjamuri August 2, 2011

how to find a string in a file..that string is middle of the file

grep ‘^string’ file name..starting of the line
grep ‘string$’ filename ending of the line

then how to fine that string middle of the line by using grep

Reply

151 i August 11, 2011

can somebody give me examples of

grep –color=auto foo myfile
$ grep –color vivek /etc/passwd

I need to find a string using grep then i want to see the searched text in a specified color where it’s present.

Reply

152 Ram September 6, 2011

This tutorial s realy gud..simple and lso 2 point..

Reply

153 Brian September 8, 2011

I have a line in a file i.e.

/a/b/c/d

How do I use grep and awk to print
a b ?

Thanks

Brian

Reply

154 Brian September 10, 2011

cat file | awk -F ‘/’ ‘{print$1, $2}’

Reply

155 santhosh September 9, 2011

Wonderful,simple ,nice and clean Thankyou

Reply

156 sudheer September 11, 2011

1) Use grep (or awk) to output all lines in a given file which contain employee ID numbers. Assume that each employee ID number consists of 1-4 digits followed by two letters: the first is either a W or a S and the second is either a C or a T. ID numbers never start with 0s. Further assume that an employee ID is always proceeded by some type of white space – tab, blank, new line etc. However, there might be characters after it, for example punctuation.
What to turn in: Turn in three things:

a. A file with the regular expression which can directly be used by grep (or awk)

b. A text file which you used to test your regular expression. Make sure that you include valid and ‘invalid’ employee IDs, have them at the beginning and the end of lines, sentences, etc.

c. A second document which re-writes the regular expression in a more human-readable form and explains the purpose of the different components of the regular expression. Also include a short explanation of your test cases.

2) Use grep (or awk) to output all the lines in a given file which contain a decimal number (e.g. a number which includes a decimal point). Decimal numbers do not have leading zeros but they might have trailing zeros. Assume the number is always surrounded by white space.

What to turn in: The same three things as above (except, of course, for this problem).

3) Write a regular expression for the valid identifiers in Java. You are allowed to use ‘shortcuts’, but need to make sure that you specify exactly what they are (e.g. if you use digit specify that that means 0, 1, 2, 3, ….9.)

Reply

157 sapna September 22, 2011

Q1)by using grep command how do display all those lines in a file that has only uppercase characters?
Q2)by using grep select all those lines which has a ?(mark) at the end of line?
Q3) by using grep command how select all those lines which has any of the following patterns ab,aab,aaab or like others?

Reply

158 Aim&fire September 29, 2011

How can I use grep with wc and uniq commands? I know I have to use piping, but I can’t seem to get the order right. Can someone help?

Reply

159 ghafil October 18, 2011

how to do grep -v ‘pattern1|pattern2|pattern3′ with invert search?

Reply

160 chandu October 19, 2011

very usefull………

Reply

161 zip November 21, 2011

how do i do this- grep -w “…” filename
with the comand “sed”?

Reply

162 siva November 23, 2011

Hi ,

I’m new to linux , I would like to know how to identify the blank files in linux for example
[root@xxxxxx]# cat dfpAL52sS5028817

[root@xxxxxx]#
[root@xxxxxx]#
[root@xxxxxx]#

I would like to identify the files that shows blank as above , can any one help me this.

advance thanks,
Siva.

Reply

163 jetole December 2, 2011

while some of this may work, it’s a rather inefficient way to do it. You can read the man page for both ps and grep by running the commands “man ps” and “man grep” (without the quotes) to get a good idea of what all the options are. In doing so you can see that you can specify the command you are looking for in ps using the -C option, you can format the output to look how you want with the -o option and you can remove the headers which usually become negligible when using the -o option by adding the –no-headers option. Additionally with grep their is a -q option which causes grep to be quiet so there would be no need to redirect output to /dev/null and another useful option would be -w which matches word only. Additionally, if you run the command “help if” (without the quotes) or “man bash” and skip to the if section, you will see that the if clause evaluates the return of a command. “[" in a if clause is a command (either a shell built-in usually or can be an external command. You likely have both but the shell built-in takes precedence. Because of this, you can use grep as the command if looks at instead of the [ command/clause and narrow down your code a lot more to look something like this:

orasid="tiger"
if ps -C oracle --no-headers -o cmd | grep -qw "${orasid}"
then
        echo "${orasid} found. PID's of oracle containing ${orasid} listed below"
        ps -C oracle -o pid,cmd | grep -qw "${orasid}"
else
        echo "No instance of oracle found with ${orasid} in the options"
fi

I'm using ${variable} here instead of $variable which isn't supported under all shells but it is supported under bash. It's not necessarily needed here however I prefer to use most of the time (there are some instances where you shouldn't use it) because I consider it a safe way to protect against errors where perhaps part of the text is not part of the variable, for example, if my variable named num containing the number 5 and I want to echo "The 5th number" where I use the variable num for 5 then, if I wrote

num=5
echo "The $numth number"
# This would print "The number". It would not know that th isn't part of the variable and it would
# think the variable is all of $numth which doesn't exist so it wouldn't print anything for that var

instead

num=5
echo "The ${num}th number"
# This would print "The 5th number". Using ${} we define exactly where the variable starts and
# ends so it knows that num is the variable and the "th" is just text to echo.

Again, the ${} isn't portable and may not work outside of bash but, on the other hand, bash has been around longer then Linux (bash since 89, Linux since 91) and is the default shell on most Linux distros so it's there to use and really worth it.

Another plus about using bash, again, this isn't portable and may not work outside of bash but you can use if [[ my_test ]] instead of if [ my_test]. [[ should only be a shell built in. What I mean by this is that [ can either be a shell built in function (and most commonly it's the shell built in you use or [ can also be a command. [[ is almost never the name of a command and hence why it's not portable but if you are using bash and you probably should be unless you know why you want to use another shell more but if you are using bash then [[ and ]] is less error prone then [ and ] and allows you to perform multiple checks within the same test clause, for example if you wanted to test to make sure one check is correct or another check is correct using [ and ], the safest way to do so would be to have to separate if statements outside of each other both performing the same action i.e.

if [ 1 == 1 ]
then
        perform this action
fi
if [ 2 == 2 ]
then
        perform that exact same action
fi

In theory you can use:

if [ 1 == 1 ] || [ 2 == 2 ]

However chaining or statements like that in multiple commands to the if statement to see if either one is true is frowned upon and is said that it may cause unexpected results. The proper way to do this from bash would be:

if [[ 1 == 1 || 2 == 2 ]]
then
        perform this action
fi

If you try to use:

if [ 1 == 1 || 2 == 2 ]
then
        perform this action
fi

then it will fail because it will treat the || inside the [ and ] as a bash || statement between two command thinking “2 == 2 ]” is a second command and will complain that you are missing the closing ] on the first command. Using [[ and ]] you can also use an AND clause to all tests are true instead of if any one test is true, for example

if [[ 1 == 2 || 2 == 2 ]]
# This returns true and performs the action in the if clause because it only needs one of the two to be true.
if [[ 1 == 2 && 2 == 2 ]]
# This returns false and performs the action in the else clause of nothing if their is no else clause and this would require both statements to be true which they are not because 1 does not equal 2.

For more details on all the operators you can use within [ ] and [[ ]], run the commands “help test”, “help [" or "man bash" (without the quotes) and if you look at the man page for bash, jump down to the section "CONDITIONAL EXPRESSIONS" (again, without the quotes).

Another handy test method to use inside bash is (( and )) for number only comparison. You can use [[ and ]] to test if a file exists or if a string is the string you want etc but (( and )) are only for numbers (more specifically integers but I’ll dive into that in a moment). which can help make sure you are not accidentally testing something you shouldn’t be. Also you can use “declare -i” (sans the quotes) to define a variable that can only hold an integer and if anything is assigned to it that is not an integer then it will default to 0.

declare -i my_variable="boat"
echo "${my_variable}"
# This will print 0 because my_variable doesn't allow strings when defined with declare -i
declare -i my_variable=15
echo "${my_variable}"
# This will print 15 because it will only accept integers.
declare -i my_variable=15
if ((${my_variable} > 10))
then
        echo "${my_variable} is greater then 10"
else
        echo "${my_variable} is 10 or less then 10"
fi
# This will print "15 is greater then 10". If you change the var to 10 or lower then it will execute the else statement.
declare -i myvar=1.5
# This will cause an error because integer variable only allow whole numbers.
if (( 1.5 == 1.5 ))
# This will also cause an error because (( and )) will work with integers / whole numbers.

You can store decimal numbers in regular variables though there is no special var designed only for decimals. There are a lot of different ways to test decimal numbers but the best, IMHO, is using the command bc command. You can use this inside a (( )) test by calling the bc command using command substitution with $(command). People often use back ticks, ” `command` ” (sans the double quotes), for command substitution which, again, back ticks are portable and $( ) doesn’t work in all shells however, if you are using bash and you probably should be using bash then $(command) is more more powerful and back ticks are much more prone to error. When using bc to perform a comparison, for example, if x < y, then bc prints 1 when it is true (if x really is < y) else it prints 0 if the comparison is false (compare x < y but if x is greater then or equal to y then x < y is false so it prints a one). Here's an example of how to compare decimal numbers.

myvar=12.5
if (( $(bc <<< "${myvar} < 15.2") == 1)
then
        echo "${myvar} is less then 15.2"
else
        echo "${myvar is greater then or equal to 15.2"
fi
# The if statement is checking to see if the number printed by the $(command) is equal to 1.
# bc is saying is 12.5 less then 15.2 which it is so the comparison is true so bc prints 1
# Knowing that bc is printing one, then the if statement could be simplified for demonstation purposes by saying
if (( 1 == 1 ))
# That doesn't make sense to test just because it's too simple but that gives you an example of how the if statement looks to bash based on the result provided by bc in the command substitution.
# If you just want to do basic math on decimal numbers in bash you can do something like
num1=12.5
num2=15.2
sum=$(bc <<< "${num1} + ${num2}"
echo "The sum of ${num1} + ${num2} = ${sum}"
# This will print: The sum of 12.5 + 15.2 = 27.7

I think I have gone pretty sufficiently above, beyond and way off topic here so I am going to quit before I bore anyone to death but I really did want to enlighten people to the power of bash and it’s capabilities and I believe I have done a good job at starting that so far so I’m gonna quit while I’m ahead, if I am ;-)

Reply

164 jetole December 2, 2011

Oh P.S.

I don’t know what the name of the oracle server is. In my first example I used:

ps -C oracle

This was assuming the name of the command running is oracle however if you know part of the command name then you can find the exact command name by running:

ps -A -o ucmd --no-headers | grep -i oracle

The output ucmd shows only the command running without any arguments unlike “-o cmd” which shows the command and all arguments so when you use “-o ucmd” and do a case insensitive search for oracle, it will return any commands that are either named oracle or have oracle as part of their name but it will not return the grep command because ucmd isn’t showing arguments so the ps listing, for the line which matches grep will just show “grep” and not “grep -i oracle”. When you run the above command to find your commands name, you can replace oracle with all or part of the command you are looking for and it will return any patches, case insensitive (-i option for case insensitive).

Reply

165 Manish December 7, 2011

so much helpful nd clear document………………………………………

thanks

Reply

166 ayat sbih December 11, 2011

can you help me to learn how i can replace one word with another?

Reply

167 Shehzad-Bilal December 21, 2011

Great tutorial

Reply

168 mj December 30, 2011

i need find the starting “p” in all the files at a single directory.

Reply

169 vivek January 2, 2012

i need to grep only one occurrence of character / in std output another unix coomand on LINUX platform as example below :-

jar -tf *.zip | grep ‘\/’
installer/
installer/lib/
installer/lib/
………

anyone please help me with solution

Reply

170 Akiva January 5, 2012

thanks

Reply

171 perg January 20, 2012

Thanks, was helpful even 4 years later!

Reply

172 simmy January 22, 2012

really super site to learn linux grep command

Reply

173 joanna January 23, 2012

what if we want the output of one command, minus the output of another command… ? by using grep -v?
for example ls and ls file.txt (i.e print the output of ls, except the ones related to file, using grep… )

Reply

174 jay February 6, 2012

how to find/search particular date & time when we have more than 1000(times and date) stored in a log file?

Reply

Leave a Comment

You can use these HTML tags and attributes for your code and commands: <strong> <em> <ol> <li> <u> <ul> <blockquote> <pre> <a href="" title="">




Previous post:

Next post: