15 Practical Grep Command Examples In Linux / UNIX

by SathiyaMoorthy on March 26, 2009

Grip on the Unix Grep Command
Photo courtesy of Alexôme’s

You should get a grip on the Linux grep command.

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 and mysqladmin 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. Search for 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 To search “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-strings using 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/around the match using 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 search using 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 recursively using 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 to do 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 matches all 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 matches using 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 matches the 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 to find 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 -o option.

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 match in 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

To show the line number of file with the line matched. It does 1-based line numbering for each file. Use -n option to utilize this feature.

$ 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

Awesome Linux Articles

Following are few awesome 15 examples articles that you might find helpful.


Linux Sysadmin Course Linux provides several powerful administrative tools and utilities which will help you to manage your systems effectively. If you don’t know what these tools are and how to use them, you could be spending lot of time trying to perform even the basic administrative tasks. The focus of this course is to help you understand system administration tools, which will help you to become an effective Linux system administrator.
Get the Linux Sysadmin Course Now!

If you enjoyed this article, you might also like..

  1. 50 Linux Sysadmin Tutorials
  2. 50 Most Frequently Used Linux Commands (With Examples)
  3. Top 25 Best Linux Performance Monitoring and Debugging Tools
  4. Mommy, I found it! – 15 Practical Linux Find Command Examples
  5. Linux 101 Hacks 2nd Edition eBook Linux 101 Hacks Book

Bash 101 Hacks Book Sed and Awk 101 Hacks Book Nagios Core 3 Book Vim 101 Hacks Book

{ 114 comments… read them below or add one }

1 Joao Trindade March 28, 2009 at 3:54 am

You have a small glitch:
>> 4. Match regular expression in files using grep -i

Don’t you mean:
4. Match regular expression in files using grep -e

The rest of the post is great.

2 Ramesh March 29, 2009 at 12:16 am

Joao,

Thanks for pointing it out. I have corrected it. Also, we can do REGEX without the option -e as shown in the example #4.

 
From Man Pages:

SYNOPSIS
  grep [options] PATTERN [FILE...]
  grep [options] [-e PATTERN | -f FILE] [FILE...]


-e PATTERN, --regexp=PATTERN
Use PATTERN as the pattern; useful to protect patterns beginning with -.
3 dragon March 31, 2009 at 11:26 pm

Hi:

FYI, tip 14 will be
2:3
8:3
on Ubuntu system. (including the \n character I guess

4 Ramesh March 31, 2009 at 11:44 pm

Dragon,

Thanks for pointing it out. I’ve corrected it.

5 Francesco Talamona April 26, 2009 at 2:48 am

I find very useful the following command, when you have to deal with a very lengthy configuration file full of comments:

grep -v -E ‘^\#|^$’ /etc/squid/squid.conf

It skips every line beginning with an hash (#) or empty, so you can see at a glance the 15 lines edited out of a +4400 lines text file.

BTW interesting topics, great posts…

6 albar May 7, 2009 at 7:51 pm

help me
how to bzgrep : ^C02
but ^C is count as one special character,
in this word:
data1^C02data2

thank’s

7 Ramesh Natarajan May 8, 2009 at 5:51 pm

@Francesco Talamona,
Thanks a lot for sharing your grep command example. Yes. all those empty lines and comment lines can get very annoying when you do grep. So, it is an excellent idea to hide them in the grep output with your examples.

8 sasikala May 11, 2009 at 9:41 pm

@albar,

try like this
grep ‘\^C02′

9 albar May 12, 2009 at 1:18 am

@sasikala ,
i do have try that too, but still got nothing,
but it works when ^ and C count as two character

thank’s

10 SathiyaMoorthy May 12, 2009 at 4:33 am

@albar

You should type ^C as ctrl-v + ctrl-c in grep as single character as
$ grep ^C02 file

Dont escape, dont type it as ^ C as two characters. Hope this helps.

11 albar May 12, 2009 at 8:59 pm

@sathiya,
god bless u all
it work’s thanks

12 Manish Patel May 21, 2009 at 7:00 pm

Hi

I am trying to exclude the last word of all the line like sync.php, uploads.php, backup.php

File text include as below

/usr/home/htdocs/drag-and-drop/htdocs.php
/usr/home//htdocs/sms/publish/pages/sync.php
/usr/home/htdocs/track/backup.php
/usr/home/htdocs/smstest/smstest.php
/usr/home/htdocs/uploads.php
/usr/home/htdocs/017/backup.php

How can I achieve that using grep or sed or awk

Also how I can use “*” wildcard in sed command like to replace *.php to *.txt or any other extension.

Thank you in advance.

Manish

13 Francesco Talamona May 21, 2009 at 10:36 pm

Are you restricted to sed or awk?

1)
dirname ‘/usr/home/htdocs/drag-and-drop/htdocs.php’
/usr/home/htdocs/drag-and-drop

2)
rename does what you want

14 Manish Patel May 24, 2009 at 6:55 pm

Hi,

Those lines are the contents of the text file and I don’t want to change the actual directory or the file on server. I want to change the contents of the file where all file file names ending at the line should be removed. So the final file contents should look like this

cat filecontenet.txt
/usr/home/htdocs/drag-and-drop/
/usr/home//htdocs/sms/publish/pages/
/usr/home/htdocs/track/
/usr/home/htdocs/smstest/
/usr/home/htdocs/
/usr/home/htdocs/

I think rename would not help here in editing file contents.

Thank you
Manish

15 SathiyaMoorthy May 24, 2009 at 11:43 pm

rev filecontenet.txt | cut -d’/’ -f2- | rev

rev filecontenet.txt –> reverses the file and pipes to cut command.
cut -d’/’ -f2- –> cuts off the first field ( cuts off last field, as it is reversed ).
rev –> prints the output given order.

16 P0B0T May 26, 2009 at 11:36 pm

Manish,

I believe you’re looking for the following

sed -e ‘s/.php$//’ filecontenet.txt

17 P0B0T May 26, 2009 at 11:39 pm

Sorry, didn’t read your requirement carefully.

Try this:

sed -e ‘s/\/[^/]*.php$/\//’ filecontenet.txt

18 Manish Patel June 5, 2009 at 5:31 pm

Hi

Thank you to Sathiya Moorthy and P0B0T.

Both solution worked very nicely for me.

P0B0T can you explain how your command works for each defined option ’s/\/[^/]*.php$/\//’

Thank you
Manish

19 mano June 10, 2009 at 3:00 am

The above info on grep is really great. I want to search for a string in all the files in the directory and add a $ symbol at the start of the searched line and save in the same file.

20 SathiyaMoorthy June 18, 2009 at 10:49 pm

@mano
More than using grep for this requirement, you can use sed which is:
sed -i ‘s/.*abc.*/$&/’ *

-i : edit the input file.
s/// : substitute the matched pattern with the replacement string.
/.*abc.*/ : match the string abc
/$&/ : Replace with $ followed by matched string.
* : all the files in the current directory.

This is one way of satisfying your requirement, there may be other efficient ways.

Hope this helps.

21 mano June 19, 2009 at 12:17 am

Hi SathiaMoorthy, Thank u so much. it works fine. If I need to search for files in all subdirectories, how should this “sed” command modified?

Thanks in advance.

mano

22 SathiyaMoorthy June 27, 2009 at 12:05 am

@mano
Modification in sed command is not needed.

To search for all files in the subdirectory.
find . -type f

Execute the command on all those files with -exec.
find . -type f -exec sed -i ‘s/.*abc.*/#&/’ {} \;

But think twice before executing this command, because it will recursively edit all the files. Taking backup before executing this command is wise.

Refer the earlier article linux find command examples.

23 Vidya July 1, 2009 at 2:59 am

Hi,

I want to grep next 3 words in a line from the matching criteria word..
like if the line is

This is -g gateway -e enterprise -s server

Then I want to grep “-g gateway -e enterprise” from the line

Can you please help me in this case.
Here gateway and enterprise value can be anything so need to grep next 3 words starting form “-g”

24 SathiyaMoorthy July 1, 2009 at 5:58 am

@Vidhya

$ grep -o -E — “-g \w+ -e \w+” FILENAME
-g gateway -e enterprise

Explanation of the above command.,

-o : only matching ( point 13. )
-E : extended regexp
— : indicate end of options
\w+ : word

25 Vidya July 1, 2009 at 9:00 am

Hi Sathiya,
Its not working.
It says
grep: illegal option — o
grep: illegal option — E
Usage: grep -hblcnsviw pattern file . . .

I am working on Solaris and setting shell as bash.

26 Amit Agarwal September 21, 2009 at 6:18 am

grep version on solaris is little older and as man would show you all these options are not available, so you can try ack (standalone) version which is very powerful and requires only perl to be installed.

27 learner October 7, 2009 at 5:31 am

Hi,
How to use grep to find lines containing multiple strings
ex: line1:Today is oct 7, wednesday. not 8th
line2: This is not summer.
line3: when is summer?
I want to return line2 containing strings “not” and “summer” both.

Thank You.

28 SathiyaMoorthy October 7, 2009 at 10:41 am

@learner

There are several ways possible, use the one which you find as appropriate.

$ grep "not.*summer" file1
line2: This is not summer.

$ grep "not" file1 | grep "summer"
line2: This is not summer.
29 learner October 7, 2009 at 10:56 pm

@SathiyaMoorthy

Thank You for your very quick reply.

My question was not piping and hard coding every string , as i mentioned multiple strings, i was looking for something in likes of
grep -F ‘string1
string2
string3
string4
…..
stringn’ filename
which returns single occurrence of something like either string1 ,string2,.. stringn or all .., what i wanted was only string1 and string2 and ……. stringn begin returned.
[please note that i will be provided with strings as newline separated strings ,which i don't want to parse again and i have constraint of using grep only]

Thank You.

30 Ashish December 1, 2009 at 4:07 pm

Hi,

I need to sthing like this
I have a file containing 400 domainId values seprated by new line
ex. domain.txt
domain1
domain2
domain3…

I have a script that takes each domain and calls an api that returns me an xml.
like this for each domain
val1
domain1
val2
val3
val4
XXX
val1

now i want to spit out the domain name in a file that does not matches domainid value XXX.

how can i do it using grep
TIA

31 Ashish December 1, 2009 at 4:16 pm

Hi,

I need to sthing like this
I have a file containing 400 domainId values seprated by new line
ex. domain.txt
domain1
domain2
domain3…

I have a script that takes each domain and calls an api that returns me an xml.
like this for each domain

<tag1>val1</tag1>
<domain>domain1</domain>
<tag2>val2</tag2>
<tag3>val3</tag3>
<tag4>val4</tag4>
<domainid>XXX</domainid>
<tag5>val1</tag5>

now i want to spit out the domain name in a file that does not matches domainid value XXX.

how can i do it using grep
TIA

32 Varun December 17, 2009 at 7:16 am

Hi,
The options mentioned in point 6 for displaying the context with A, B, & C does not seem to work on Solaris 10 with both grep & egrep

Is there a version of this grep available for Solaris?

Thank you,
Varun.

33 Jawn Hewz December 21, 2009 at 7:54 pm

Does the -b (byte offset) work when greping binary files? I do not get an offset returned when I grep a binary file, but I do when using a text file. I am using grep under Cygwin.

34 fety January 11, 2010 at 3:32 am

thanks very much for this tutorial. it is very helpful..

35 eMancu January 24, 2010 at 12:49 pm

Awsome tutorial!
I’m reading all your blog, its amazing!

36 Raghu Baba January 30, 2010 at 4:44 am

Hai.. I want to Parse my file .. Word to Excel .. so tell me some grep & cut commands…

37 Jeff Floyd February 1, 2010 at 6:54 pm

Whats the difference between $ grep -c ill memo and $ grep -n ill memo?

38 joeq February 4, 2010 at 3:57 am

hi
i got 1 problem…how can i find a numbers like 99,000,000.95 in my server database using unix command..
tq

39 abhishek February 21, 2010 at 4:31 am

content was very useful

40 Anonymous March 8, 2010 at 4:26 am

Hi,

Those lines are the contents of the text file and I don’t want to change the actual directory or the file on server. I want to change the contents of the file where all file file names ending at the line should be removed. So the final file contents should look like this

cat filecontenet.txt
/usr/home/htdocs/drag-and-drop/
/usr/home//htdocs/sms/publish/pages/
/usr/home/htdocs/track/
/usr/home/htdocs/smstest/
/usr/home/htdocs/
/usr/home/htdocs/

I think rename would not help here in editing file contents.

for this question , awk really helpful with single line command

go to the current directory
ls -l | grep -v ^d | awk ‘{print $9}’ > new.txt

$9 — is the last filed which is filename only when u list with option ls -l ,
new.txt contains only the filenames which you wnated to filter out

41 skipper March 26, 2010 at 5:54 am

nice article

42 VIKAS April 4, 2010 at 7:23 pm

Excellent stuff, just loved grep -A,B,C options
and
grep -o “xxxx.*yyyy” kinda commands.

This will help me a lot, I used awk more in my shell scripts, But I have got a new friend “grep” for some selective printing :-)

43 Sam April 17, 2010 at 3:35 am

I have just finish reading this wonderful article. Let me answer this:
Whats the difference between $ grep -c ill memo and $ grep -n ill memo?
grep -c return the number lines that matched ill in memo.
grep -n return the matched lines with line-number as prefix.

44 Chong April 20, 2010 at 3:05 am

how to grep a statement contain ‘*’ from a file at the same time to match the first character too.

example the statement in filename profile.txt :-

“Mary stay at uttana*istana with her grandmum”

current grep statement :-
grep “^Mary stay at uttana*istana” profile.txt

result: no row matched the grep statement because of *
How to use grep command for the combine condition of statement with * and match the front word?

45 vm April 30, 2010 at 8:24 pm

In bash script without using perl, how i can grep a number from a file if there exists a number greater than 80 in that file.

46 palash June 13, 2010 at 12:14 pm

grep -c “pattern” filename returns the number of lines that matches the pattern, even if the pattern occurred for more than one time in any line. Is there any option to know how many times the pattern matched in a file?

47 mathan June 20, 2010 at 10:21 am

HI,
I am new to linux…
can you tell me how to exit from grep command….
mistakenly i type grep filename

But it’s nothing shown…. pls looking for quick reply…

48 SathiyaMoorthy July 4, 2010 at 7:20 am

@mathan

There is nothing like exiting from grep.

First argument to grep is taken as PATTERN, not as filename. So as far as i understand it is waiting for input to match. So just exit from it using CTRL+D.

49 Ross Huggett September 16, 2010 at 5:04 am

Nice article. Thanks.

50 ec October 6, 2010 at 6:14 pm

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

51 Lou February 24, 2011 at 1:16 pm

Is there a way to grep for a word on in a file and return that line plus the next?

52 Francesco Talamona February 26, 2011 at 3:33 am

@ Lou:

cat testfile.txt
first line
matching line
following line
ending line

grep matching -B 1 testfile.txt
first line
matching line

53 abhishek kumar April 19, 2011 at 12:53 pm

really to nice and too simple to understand,

thats great

thank you

54 Nikita April 21, 2011 at 12:06 pm

PLEASE HELP ON QUESTION B.

You are searching a file for lines that contain US state abbreviations in parentheses. e.g.: (ma),(NH),(Ky), etc. So you decide to match any line containing ( ) with exactly two characters (not letters) in between.
A) What grep will get this done?

My Answer—> grep ‘([a-zA-Z][A-Za-z])’ file

You now notice that some of the lines that the grep from part A matched contain the the string (expired). You want to eliminate these lines from your output, so you decide to pipe your output to another grep.
B) What will the new command be? (both greps with the pipe)

My Answer —> grep –v grep | grep ‘([a-zA-Z] [A-Za-z])’ ——-> PLEASE HELP!

55 Francesco Talamona April 22, 2011 at 12:44 pm

@Nikita:
One step is enough:
egrep ‘\([a-zA-Z]{2}\)’ file

56 suprabhat April 27, 2011 at 3:26 am

How to display all lines that have less than 9 character in a file

57 Paul May 16, 2011 at 3:09 pm

I’m new to linux; was wondering what does \# after the grep command accomplish, as shown in the example below?

grep \# input*.txt | awk ‘{print $4}’ | sort | uniq > output.txt

thank you

58 Dinesh May 17, 2011 at 4:03 pm

For a given patern like
Fri Nov 26 16:04:52 2010
I want to grep for all the lines in a file having the above format.
But I have all the values except for the time, that is “16:04:52 ” , the data I have is
“Fri Nov 26 2010 ” . The file is having 5 years of date with the timestamp as specified above.
Please let me know How shall I grep the file to get all the lines on the date “Fri Nov 26 2010 ” .

thanks

59 shyam May 29, 2011 at 10:45 pm

i have a doubt here i tried to look at output of cmd

grep “[^A-Z]” file.txt

this is showing all characters excluding capital letter
what does this command actually do

60 shivaraj Patil July 25, 2011 at 11:14 am

HI i have a file with this values
100 first line
101 second line
101
102
102
109
now i need a script that can take two lines and find which is greatest

61 sudheer September 10, 2011 at 8:32 pm

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.)

62 Dinesh September 22, 2011 at 12:43 pm

Paul

grep \# input*.txt | awk ‘{print $4}’ | sort | uniq > output.txt

Since # is a special character,we are treating # as # by putting backslash infront of that.
Noe Greap searches for pattern # in a list of file starting as input and nding a txt and then awk prints the 4th field and sort is doing sorting the 4th field returns from awk and unis is doing uniq operation.

63 Dinesh September 22, 2011 at 12:45 pm

Shyam

grep “[^A-Z]” file.txt

Grep will print the lines that does not start with CAPTIAL LETTERS.

Using ^ inside the [] will do the work opposite to the pattern what you have been searching for …

64 haydarekarrar December 23, 2011 at 4:29 am

Just a minor thing the last result line is removed in the example above, this should be the result:

$ grep “this” greptest.txt
this line is the 1st lower case line in this file.
Two lines above this line is empty.
And this is the last line.

65 gotham January 22, 2012 at 4:32 am

awesome. thanks a lot.

66 edward January 31, 2012 at 2:20 am

For example my data is (file.ave) :

MRR 120101000000 UTC+07 AVE 60 STF 150 ASL
H 150 300 450 600 750 900
TF 0.0149 0.0515 0.1171
F00 -67.04
F01 -69.27

I use grep as:
grep -r ‘MRR’ *.ave > time_0101.txt. In this case all file goes to time_0101.txt, I have many files and I need each output goes to specific file name. Any idea ? And how to use grep to take F00 and F01 ? If I use grep -r ‘F’ *.ave, the first line will be taken also because of STF, Thanks for help..

67 shrikant February 14, 2012 at 10:23 am

Thank you :-)

68 chinna February 19, 2012 at 8:48 am

here my question is in a directory i have 10 files.some files contains size in kb’s and some files contains size in mb’s…..i want display the files only which file size is more than 1 mb……
could anybudy help to find answer for this question….

69 Anderson Venturini March 14, 2012 at 6:01 am

Great post! It was very useful! thanks a lot! ;)

70 Anonymous April 9, 2012 at 3:22 pm

To answer Chinna… If you have some files showing M, and some K, then your “ls” command is probably running on a Linux box, and using the “-h” option.

The preferred method would be NOT to use the “-h” option, and let “ls” print file sizes in bytes, which means that your script will be able to get the same units+detail for all file sizes listed.

Then you can use “awk” to filter out files where $5 (5th field) is over 1Meg, like this:

/bin/ls -l | awk ‘$5>=2^20′

If you only want file names, not ‘ls’ style list, then have awk give you that part of output:
/bin/ls -l | awk ‘$5>=2^20{print $NF}’

Note: this does not like file names with spaces…
—-
notes for Other postings on this thread:
To: Francesco Talamona
(who was using “grep” to remove ##_comments from long config files)
grep -v -E ‘^\#|^$’ /etc/squid/squid.conf
You may want to remove comments that do NOT start on the first char of a line,
and ‘sed’ is more useful for that
sed ‘s/#.*$//;/^[ ]*$/d’ /etc/squid/squid.conf
This will remove comments from each line, then discard the line if blank, or only spaces remain.
=========
Also, where the -B and -A options are described for “grep”…
This is for GNU/Linux, and not supported for most Non-Linux boxes.

#–JETS

71 KHEE April 15, 2012 at 8:39 pm

Hi expert,

i am new to unix env…
try to use certain command to help me generate 1 output file as below:

input file:
A
A/I 0.2 0.3 0.8
B
B/I 0.6 0.8 0.9
C
C 0.8 2.1 6.0

I just want to grep all A B C only, where want to skip the line which have the number together. And my output file pattern is A B C D…etc ( A, B,C all are a word).

mean i want first,second line, and skip 3rd & 4th lines, thanks for help.

72 krishna April 20, 2012 at 9:15 pm

How do you find using regular expression, characters beginning with and ending with any characters.

In AXyz122311Xyslasd22344ssaa Aklsssx@sdddf#4=sadsss kaaAASds
How do we get the characters “slas” out that begins with “11Xy” and ends with “d223″ in UNIX using regular expression?

echo $MSG | grep -o ‘(?<=11Xy).+(?=d223)'

73 bala May 10, 2012 at 9:12 am

@krishna,
echo $MSG | grep -o 11Xy.*d223

74 guru May 22, 2012 at 11:52 am

i need answer for the following question
using grep, determine count of and print the list of words having uppercase letters when the input sentence is given in command line

75 mitchell fox May 24, 2012 at 7:45 am

I know this is a simple grep or grep/sed question:
I have a log file with identified errors.The errors will lines containing the words “Patient ID: 12345678999″ (quote marks are mine). i substituted the number 12345678999 for a real number. The real number will be any combination of 11 integers. So I would want to grep for Patient ID: 12345678999 but just end up with the numbers themselves, not the rest of the lines.
Example of result I would like:
12345678999
23678900456
Thanks

76 Albert July 1, 2012 at 10:10 am

Hi,

Is there any way to find strings longer than 50 charachter within files with grep?

Thanks,

77 Abhishek Verma July 17, 2012 at 1:15 am

It’s really great …….

78 SANKET July 25, 2012 at 7:46 am

Helo anyone tell me how find word from directory contains number of files using grep command and any other command

79 sam July 31, 2012 at 4:06 pm

Hey i am trying to just write first simple script. Here what I am trying to do is pass the word which I want to find in array from command line. After that it should print all entires which contain that word. Say I want to find Jacob from command line but its not returning any result.

#! usr/bin/perl

use Fcntl;
print “content-type: text/html \n\n”;

print “Enter word : “;
$word = ;

@myNames = (‘Jacob’, ‘Michael’, ‘Joshua’, ‘Matthew’, ‘Alexander’, ‘Andrew’);
@grepNames = grep(/$word/, @myNames);

foreach $Names(@grepNames)
{
print $Names;
print “\n”;
}

80 Ravneet September 4, 2012 at 7:10 am

Answer to Palash:
$grep -o pattern file name | wc -w

81 Victor Wood September 4, 2012 at 1:11 pm

Answer to SANKET:
if I understand your question correctly:
ls -1 | grep “P.*Entity\.java” –count
will do a listing of your directory, send it to a grep search, and then count the matches, many people would drop the -1 and abbreviate the –count to:
ls | grep “P.*Entity\.java” -c

82 sravan Ch October 15, 2012 at 6:15 am

hi there!
needed help here..

how to display counts of ids in a file next to each other ?
ex:
file name: images01.txt
ids present in the file: 10001,10002,10003,10004

to-display: id followed by counts
10001 = 100
10003 = 50

83 Anonymous October 27, 2012 at 2:06 pm

Helllo ,
i want to run a script on linux terminal when i press the submit button on webpage…
it is possible..?

84 Vikas October 28, 2012 at 1:11 am

Mr. Anonymous,

Do you think this is the right forum to ask this question?

By the way, this can be handled through PHP. Google it and find it how. Post in a relevant thread if you face difficulties.

Regards
Vikas

85 murali December 18, 2012 at 10:55 pm

i want only single command,
i.e lines starting with $

86 Bama March 1, 2013 at 10:49 am

#1 – “$ grep “this” demo_file” – returned two lines:
“this line is the 1st lower case line in this file.”
“Two lines above this line is empty.”

Shouldn’t it also also include this line?
“And this is the last line.”

Thanks or the article, I’ve chosen today to get my grep on!

87 bon April 19, 2013 at 12:48 am

Hi All,
Thank you very much for this website.
I have one query:
How to search directory by name.
Suppose, I want to store all the directories in an array with name “abc” only.
I tried this:

$name=”abc”;
@array_1= grep (/$name/), $curr_dir; #curr_dir is any directory

________________________________________________________________________________

But the problem is, this command also matches directory with name “abcd”, “aabc”, “abc24″ etc
Can you please help me?

88 Tony April 26, 2013 at 4:35 pm

How can I find any lines in a source file that contain 2 search strings. When I tried using a pipe I got an error. Am running on TNS Guardian (not unix).

Thanks!

89 velpandian June 5, 2013 at 12:46 am

# ifconfig
eth0 Link encap:Ethernet HWaddr 54:04:a6:8a:42:58
inet addr:10.2.0.170 Bcast:10.2.0.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:95309 errors:0 dropped:0 overruns:0 frame:0
TX packets:45 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:100
RX bytes:8865945 (8.4 MiB) TX bytes:5438 (5.3 KiB)

From the above input i want to grep only IP address and subnetmask, that single grep command should be capable to do grep for any ip and any subnetmask. Here i have 10.2.0.170 as IP and subnetmask as 255.255.255.0, so i want to grep only IP and subnetmask.
If i have 1.1.1.1 as IP and 255.128.0.0 as subnetmask in this case the “same command” should capable to do grep IP and subnetmask

Thanks in advance

90 gill bate$ August 19, 2013 at 6:45 pm

$ grep -l this demo_*
demo_file
demo_file1

okay. How do you find all files with a given extension using grep ?

91 Sandeep August 28, 2013 at 3:09 am

Hi,
I have query below:
Sample data file:
26/Jul/2013:11:57:24 -0400 TAN101 active
26/Jul/2013:11:55:24 -0400 TAN102 active
26/Jul/2013:10:55:24 -0400 TAN101 Idle
26/Jul/2013:10:50:24 -0400 TAN103 idle
26/Jul/2013:10:53:24 -0400 TAN103 active
26/Jul/2013:10:43:24 -0400 TAN103 active

Query is:I want the output as group by count.I mean number of records with TAN101,number of records with TAN102,number of records with TAN103 .

TAN101 2
TAN102 1
TAN103 3

Please help me .

92 Raj September 20, 2013 at 11:58 am

How can I grep this ?

if [ "$EUID" = "0" ]

I want to grep this from /etc/profile and add somelines below it

93 shanmugam September 29, 2013 at 2:46 pm

Hi,

I am beginner in using Linux Grep command and I got search for words with “489″ in a file as follows:
LRD489E
LRD489
LR489-SPAD
LR489(W)
U489-AB

I tried using grep command as follows:
egrep -o ‘[A-Z]*489[A-Z]*’ FLG.id

the results I get
LRD489E
LRD489

how to get
LR489-SPAD
LR489(W)

Any help appreciated.

94 John Hsu October 4, 2013 at 1:38 pm

Remove tons of abc files
ll | grep abc | awk ‘{print “rm “$8″ “}’ | csh

Note:
“$8″ — column 8 of ll comand

95 Amitha November 21, 2013 at 7:29 am

Hi,

could you please tell me what does “grep -i xyz | grep -v grep” means????

96 Irfan December 28, 2013 at 1:13 am

grep -A or -B or -C does not work usually. is there any sed, awk or any other function that can perform an equivalent operation? what grep utility will I need to run these parameters?

97 Amit December 30, 2013 at 7:04 am

Nice Tutorial …

98 LakshmiNarayana December 31, 2013 at 3:24 am

HI Sandeep ,
store input in file named “GroupFile”
grep -o “\(TAN[[:digit:]]\+\)” GroupFile | sort | uniq -c

99 CLIFF January 6, 2014 at 5:32 pm

Dear Sir:
I have a file… in which I intend to extract the pattern (a few lines) starting
with “set_multicycle_path” then some string (*) then “-from” then some string (*)
then “-through ” then some string (*) then “-end ” then some string (*), where
these strings have variable lines, and then the end of these strings afterwards were ]

How to use grep (but not a perl) to extract these lines?
Thanks

100 NiceGuy January 15, 2014 at 6:08 pm

Nice posts……

cat myfile.txt |grep *.al > output.txt
I want to grep a file that contains repetition of words (in this case “.al”) using the command above. But I want only one occurrence of each word to be written to another text file called “output.txt”. How can I use the grep command to accomplish this?

101 NiceGuy January 15, 2014 at 6:16 pm

To be a bit clearer on my request above…..

In myfile.txt, there could be two or more lines with “46.al” for example but I want only one line of “46.al” to be written to output.txt.

Say for example myfile.txt contains the following lines:

46.al
477.al
446.al
46.al
xyz.al
46.al
46.al
I want “output.txt” to contain the following: 46.al, 477.al, 446.al, xyz.al

102 Gobinath February 13, 2014 at 7:19 am

Hi,
Is there any grep for the below mentioned scenario.
In file.txt file,
line1
line2
line3
Function(“line1″,
“line2″);
line2
line3
.
.
Now i want to grep only the word ‘line 2′ from the function
How its possible any idea
TIA

103 SP February 16, 2014 at 6:35 am

I want to use grep twice for 2 conditions in a single search….let’s say i want to search all fies modified on 10-Dec-13. So in my current directory i m typing…below commad for result.
ls -lt | grep -c “^-” | grep “10 Dec”

but the above command is not working

104 Sanket Patil February 17, 2014 at 3:56 am

@SP
Use below command
ls -lt | grep -i “Dec 10″

105 Ed April 30, 2014 at 12:12 pm

how can I grep a file web.log which contains \\ with mostly no data, however, I would like to find only those values of swingSACovering that HAVE data. In other words, there may be 4000 or so xml elements which do not contain any values. But 2 or 3 will contain data with 6 digits, such as 148231
\148231\ I only want to find the data elements with data.

106 ss May 8, 2014 at 4:52 am

if we want to find a particular word from a text file what command should i use can anyone help me with shell script..
example
i have more than 16000 lines in which i have to find the occurence particular word

107 oneteam May 20, 2014 at 5:42 am

hi
i am using the grep command to search for exceptions.
grep -w exception server.log
This is giving me the output as,
2014-05-19 09:48:17,523 346652103 INFO (Thread-4038 (HornetQ-client-global-threads-573435074):) END – processException:: exception logged into database
which is just the first line of the exception
how to capture the whole exception !

108 Dave Horrocks May 22, 2014 at 6:56 am

Can someone help?

How do I bzgrep : ^C02 when ^C is count as one special character, such as in this word:
data1^C02data2 ?

109 Raj May 29, 2014 at 9:03 am

How to search for lines that have only single dot in it .
#grep “^ *\.” abc ….. to search lines that have only dots it in .i.e no matter how many dots , but only dots in line .
But to search for lines that have only single dot in it ?????

110 auchomage June 9, 2014 at 12:05 pm

I’m not very good with linux/unix, and you kept the language simple, along with the examples, so I could follow it without difficulty.

Now I’m a whole lot more confident on how to use grep.

Thank you very much, this is a great article.

111 sandeep August 5, 2014 at 5:42 am

How to fiilter the Attributes in a file..
Ex:- If a file has 10 fields——->How can we filter 1,3,5,7,9 fields

112 VIKAS August 5, 2014 at 11:48 pm

Hi Sandeep,

awk would be easiest for your requirement. Try this

cat /your/file | awk ‘{ print $1 “\t” $3 “\t” $5 “\t” $7 }’

Regards,
Vikas

113 karthick August 6, 2014 at 3:21 am

thanks, very usefull command.

114 Sam September 6, 2014 at 1:35 am

how to linux shell pipeline do?
grep nd xyz | wc-i

Leave a Comment

Previous post:

Next post: