25 most used grep pattern scenarios in Linux

Introduction to grep command

grep command in Linux searches for a pattern of characters in a file. grep is a short form for Global Regular Expression Print. It prints all lines that contain the matching pattern in a file. If no patterns are matched, it returns nothing.

 

How to use grep command

The basic syntax for grep command is:

Advertisement
$ grep [option] pattern file

Here,

  • pattern: pattern of characters to search
  • file: file name or path
  • option: provides additional functionality to command, such as case-sensitive search, regex search, recursive search, count lines, etc.

You can find more detailed information in our article 20 grep command examples in Linux [Cheat Sheet].

In this tutorial, we will discuss 25 grep command scenarios with examples in Linux. Sample text file which we will use through out this tutorial.

cat command to view file content

 

1. grep pattern and print next N lines

By default, grep prints lines that match the pattern. But sometimes, you may need to print N lines after matching the pattern.

The -A option allows you to print N lines after matching lines.

To print the next 3 lines after matching text share, execute the following command.

Advertisement
$ grep -A 3 share test.txt 

Sample Output:

grep pattern and print next n lines

 

2. grep pattern and print before N lines

Similarly, you can use the -B option to print N lines before matching lines.

$ grep -B 3 share test.txt 

Sample Output:

grep pattern and print before n lines

 

3. grep and print specific lines after match

We will add line numbers to our sample file:

# cat -n test.txt 
     1	Iron pyrite is the most foolish of all minerals.
     2	The pet shop stocks everything you need to keep your anaconda happy.
     3	The father handed each child a roadmap at the beginning of the road trip.
     4	The memory we used to share is no longer coherent.
     5	Art doesn't have to be intentional.
     6	Behind the window was a reflection that only instilled fear.
     7	Siri became confused when we reused to follow her directions.
     8	He had a vague sense that trees gave birth to dinosaurs.
     9	They wandered into a strange Tiki bar on the edge of the small beach town.
    10	She looked into the mirror and saw another person.

Next let us grep for string "Iron" and print 1st, 8th and 10th line after the match.

# cat -n test.txt | grep Iron -A 10 | awk "NR==1{print} NR==8{print} NR==10{print;exit}"
     1	Iron pyrite is the most foolish of all minerals.
     8	He had a vague sense that trees gave birth to dinosaurs.
    10	She looked into the mirror and saw another person.

 

4. grep pattern and print the next word

Use the following syntax to use grep and print the next word after each match.

Advertisement
$ grep -oP '(?<=pattern )[^ ]*' file

OR

$ grep -oP '(?<=pattern )\w+' file

Sample Output:

grep pattern and print next word

To print everything in line after the match, run the below command.

$ grep -oP '(?<=pattern ).*' file

Sample Output:

grep pattern and print all next words in line

 

5. grep pattern and print word before the pattern

The following example searches for a pattern and prints a word before the matching pattern.

$ grep -oP '\w+(?= pattern)' file

To print everything in line before the matching pattern, use the following command.

Advertisement
$ grep -oP '.*(?= pattern)' file

Sample Output:

grep pattern and print word before the pattern

 

6. grep exact match (whole word)

The -w option can be used to match whole words. For instance, if you grep the, it will print only lines that contain the whole word the.

$ grep -w the test.txt

Sample Output:

As you can see, -w ignores matches that do not form the whole word.

grep exact match whole word

 

7. grep next character after the match

The following command prints the next 10 characters after the matching pattern shop.

$ grep -oP 'shop.{0,5}' test.txt

And this command prints the next 15 characters after the match window.

Advertisement
$ grep -oP 'window.{0,15}' test.txt

Sample Output:

grep next character after the match

 

8. grep the previous character after the match

The following command prints the previous 10 characters after the matching pattern shop.

$ grep -oP '.{0,10}shop' test.txt

And this command prints the previous 15 characters after the match window.

$ grep -oP '.{0,15}window' test.txt

Sample Output:

grep previous character after the match

 

9. grep and print only matching pattern

The grep command with -o prints only the matching pattern instead of a complete line.

grep -o the test.txt

Sample Output:

Advertisement

grep and print only matching pattern

 

10. grep and print file name

The -H option prints the file name for each match. It is helpful when there are multiple files to search for patterns.

$ grep -H pattern file

Sample Output:

The following example searches the text bar in all .txt files in the current directory.

grep pattern and print filenames

 

11. grep regex pattern

You can combine the grep command with regular expressions (regex) to perform an advanced search on the file. For example, the following command matches any line that contains numbers 0 to 9.

$ grep [0-9] file

Sample Output:

grep regex pattern

 

12. grep and print line number

The -n option forces grep to display matching lines along with their line number at the beginning.

Advertisement
$ grep -n word test.txt

Sample Output:

grep pattern and print line number

 

13. grep recursively in all directories and sub-directories

To search for words recursively in all directories and sub-directories, you can use -R, -r, or --recursive option. For instance, the following example greps recursively in the directory /home/golinux and its sub-directories.

$ grep -r hour /home/golinux/test

Sample Output:

grep recursively in all directories and sub-directories

 

14. grep recursively only till a certain depth in the directory

You can use the grep command with the find command to perform a recursive search only till a certain depth in the directory.

$ find /home/golinux/test -maxdepth 2 -type f -exec grep -H hour {} \;

Sample Output:

25 most used grep pattern scenarios in Linux

 

15. grep pattern and delete a line from a file

You can also use the grep command to delete a matching line from a file. The following command removes matching lines from a test.txt with the help of grep and mv command.

$ grep -v strange test.txt > tmpfile && mv tmpfile test.txt

Here, the -v option is used to get non-matching lines and the output is redirected to a file tmpfile. The second command moves tmpfile to test.txt, replacing the old one.

Sample Output:

grep pattern and delete a line from a file

As you can see, all matching lines are removed.

 

16. grep pattern with spaces

Grepping patterns with spaces is helpful when you only want to match patterns that contain spaces.

For example, this command searches for an exact match hours with leading or trailing white space characters.

$ grep -E "(^| )hours( |$)" test2.txt

Sample Output:

grep pattern with spaces

 

17. grep pattern starts with

A caret (^) indicates the beginning of the line. To search for lines that start with S, you can use ^S regex.

$ grep '^S' test.txt

Sample Output:

grep pattern starts with

 

18. grep pattern ends with

Similarly, you can use the dollar sign $ to search lines that end with a specific pattern.

This command finds lines that end with d.

$ grep 'd$' test4.txt 

Sample Output:

grep pattern ends with

 

19. grep pattern1 or pattern2 (conditional)

You can use -E option to grep multiple patterns with OR condition. You have to separate patterns with a | symbol.

It prints the lines that contain either of the matching patterns.

$ grep -E 'pattern1|pattern2' file

Sample Output:

The following example prints the lines that contain either hours or movie in a test2.txt file.

grep pattern1 or pattern2

You can also use -e option to search for multiple patterns with OR condition.

$ grep -e hours -e movie test2.txt

Sample Output:

grep pattern1 or pattern2 or condition

 

20. grep pattern1 and pattern2 (conditional)

To use grep command with AND condition, use the following syntax.

$ grep -P '^(?=.*pattern1)(?=.*pattern2)' file

Sample Output:

grep pattern1 and pattern2

 

21. grep only IP address pattern

The following grep command gets all valid IPv4 addresses from a specified file.

$ grep -E "(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)" file

Sample Output:

golinux@ubuntu-PC:~$ grep -E "(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)" ipaddr.txt
121.186.42.74
147.137.3.201
166.32.6.111
144.145.125.243

 

22. grep strings with alphabetic characters only

You can use the following command to match strings with alphabetic characters only.

$ grep -E "^[a-zA-Z-]*[a-zA-Z]$" file

Sample Output:

grep strings with alphabetic characters only

 

23. grep strings with alphanumeric characters only

To match strings with alphanumeric characters only, use the following syntax.

$ grep -Ei '[a-z][0-9]|[0-9][a-z]' file

Sample Output:

grep strings with alphanumeric characters only

 

24. grep string with special characters (brackets, dot, colon, quotes, wildcard, etc)

We can provide the list of special characters to grep for using single quotes. Here I have a sample file with some special characters

# cat test1.txt 
Opening bracket [
Closing bracket ]
Dot .
* asterisk
\ back slash
/ forward slash
" double quotes
' single quotes

We will try to grep some of them using grep. We have used -E with pipe to provide conditional pattern which we have also used in our previous examples.

# grep -E '\\|\/|\[|\]|\"|\.' test1.txt 
Opening bracket [
Closing bracket ]
Dot .
\ back slash
/ forward slash
" double quotes

We can also utilize below options with grep when looking out for special characters:

  • -F , --fixed-strings: Interpret PATTERNS as fixed strings, not regular expressions.
  • -G, --basic-regexp: Interpret PATTERNS as basic regular expressions

Here is an example to grep for backslash.

grep -F '\' test1.txt 
\ back slash

But you should know that you cannot combine -F or -G with -E. In such case you will get grep: conflicting matchers specified.

 

25. grep for 2 words with TAB between them

You can use the below grep command to search for 2 words with TAB between them.

$ grep 'word1'$'\t''word2' file

Sample Output:

grep for 2 words with tab between them

 

Conclusion

By this point, you should have understood how to use grep commands for advanced searching and filtering patterns in Linux. We hope you find these 25 examples of grep commands useful.

If you have any questions or feedback, please let us know in the comment section below.

 

What’s Next

Easy regex to grep exact match with examples
3 simple and useful tools to grep multiple strings in Linux

 

Further Reading

man page for grep command

 

References

how to grep and print the next N lines after the hit?
grep: output specific line after match
To grep for a word before matching pattern
Grep characters before and after match?
Can grep show only words that match search pattern?
How do I recursively grep all directories and subdirectories?
How to delete from a text file, all lines that contain a specific string?
How do I grep for multiple patterns with pattern having a pipe character?
Using grep to get 12 letter alphabet only lines
How to grep for two words with a tab in between them

 

Didn't find what you were looking for? Perform a quick search across GoLinuxCloud

If my articles on GoLinuxCloud has helped you, kindly consider buying me a coffee as a token of appreciation.

Buy GoLinuxCloud a Coffee

For any other feedbacks or questions you can either use the comments section or contact me form.

Thank You for your support!!

Leave a Comment

X