"Everything is a file in Linux" and that is the reason most Linux users spend a large chunk of time tinkering the file contents.
This is where the importance of the grep command plays a crucial role by letting you search and match patterns within text files or get an output.
So in this tutorial, I will walk you through all the essentials required to learn the grep command:
- The basic syntax and popular flags of the command
- Practical examples of the command
- Practice questions for grep command
Here's How to Use the grep command
To use the grep command, it is important to know the syntax.
So here's the basic syntax of the grep command:
grep [OPTIONS] PATTERN <Filename>Here,
[OPTIONS]: using the given set of options, you can change the default behavior of the grep command such as using the-ienables case-insensitive search.PATTERN: Here's where you specify the text you are looking for from the file or the command output. It can also be a regular expression for more complex patterns.<Filename>: Here you specify the file you want to search within and if you don't specify any file then it will search from the standard input.
Now, let's take a look at some commonly used options with the grep command:
| Option | Description |
|---|---|
-i |
Ignores case sensitivity in the search. |
-v |
Prints lines that don't match the pattern. |
-n |
Displays the line number of each matching line. |
-w |
Matches only whole words, not parts of words. |
-c |
Counts the number of matching lines, doesn't print the lines. |
-r |
Searches through directories recursively. |
-A n |
Prints n lines after each matching line. |
-B n |
Prints n lines before each matching line. |
-C n |
Prints n lines before and after each matching line. |
-f Filename |
Reads search patterns from a file, one per line. |
-o |
Prints only the matched part of the line. |
You might be wondering β what happens when you use the grep command without any options? Well, it simply prints the lines containing the pattern.
For example, here, I want to search for the error keyword within the file named error.log , and without any additional options, it gave me this output:

Did you see that? It highlights the found pattern and also prints the lines containing the pattern.
To make this tutorial easy to follow, I will use a sample file named error.log which includes the following lines:
This is a log file with various messages.
An error occurred at 10:00 AM.
The system encountered an unexpected issue.
Everything is working normally now.
Another error message at 11:30 AM.
Warning: Please check disk usage.
Log closed at 12:00 PMPractical examples of the grep command
In this section, I cover various examples of the grep command so you can have a better idea of how you can use the grep command.
1. Case-insensitive search
By default, the grep command patterns are case-sensitive, and for the most part, it works well, but you may want to turn off the case sensitivity.
To do so, you can use the -i flag as shown here:
grep -i PATTERN FilenameTo demonstrate this, I will use ERROR as a search pattern, and it will show matching patterns irrespective of case sensitivity:
grep -i ERROR error.log
2. Show n lines before and after the matching lines
By default, the grep command only prints the matching lines, but sometimes you want the context of the matched lines. So you print the lines before and after the matching lines.
Print n lines before the matching lines
To print n number of lines before matching lines, you use the -B flag and specify the number of lines to print as shown here:
grep -B <number_of_lines> PATTERN FilenameFor example, here, I printed the one line before every matching line:
grep -B 1 error error.log 
Print n lines after the matching lines
To print the n number of lines after the matching lines, you use the -A flag and specify the number of lines as shown here:
grep -A <number_of_lines> PATTERN FilenameIf I want to print one line after the matching lines, then I will use the following:
grep -A 1 error error.log
Print n lines before and after matching lines
If you want to print lines before and after altogether, then you use the -C flag and specify the number of lines to print as shown here:
grep -C <number_of_lines> PATTERN FilenameLet's say I want to display 1 line before and 1 line after the matching pattern line, then I will be using the following:
grep -C 1 error error.log
3. Show lines that do not match the pattern
For the most part, you'll be using the grep command to match patterns, but it also allows you to invert the search results.
In simple terms, you specify the search term, and it will print lines that do not match the given pattern and for that purpose, you use the -v flag as shown here:
grep -v PATTERN FilenameFor example, if I want to print every line that does not contain the error term, then I will use the following:
grep -v error error.log
4. Display the number of matched lines
To display the number of matched lines, all you have to do is use the -n flag as shown:
grep -n PATTERN Filename
5. Display the total number of matched results
If you want to know the number of matched results, then you can use the -c flag as shown:
grep -c PATTERN FilenameFor example, here, I wanted to find how many times the term error is mentioned in the error.log file, so I used the following command:
grep -c error error.log
6. Search for a pattern in multiple files
If you wish to search for a pattern from multiple files, then all you have to do is append multiple files to search, as shown here:
grep PATTERN File1 File2For example, here, I searched for the error string from two files: error.log and error.txt and it gave me the following output:
grep error error.log error.txt
7. Search pattern from every file in the directory
If you want to search for a specific pattern from every file present in the directory, then you can use the grep command recursively, and it will search the given pattern from every file present in that specific directory.
To enable recursive search, use the -r flag as shown:
grep -r PATTERN <Directory or path to directory>For example, here, I have searched for the error string in the current directory:
grep -r error .
8. Search for the exact word
By default, the grep command will print all the matching patterns, which is not what you always want. Sounds strange? Allow me to explain.
Suppose you want to search for the term Orange but if the specific file also contains the term Oranges then the line containing the term Oranges will also be shown as an output.
To overcome this problem, you can use the -w option and specify the pattern:
grep -w PATTERN FilenameFor example, here, I intend to find the term err so I will use the -w flag and will also show you the difference between what happens when you don't use it.
grep -w err error.log
When I used the -w flag to find the err string, it returned no results, as it does not exist.
But in the second attempt where I removed the -w flag, it returned two results displaying content where the string pattern is a part of another string (not separate).
9. Use regex pattern for advanced search
If the normal search is not doing justice, then you can use the regex pattern (sequence of characters) to have better control over your search. You can use the -e flag to use the regex pattern, whereas -E let you use the extended regex:
grep -e/-E PATTERN FilenameFor example, here I have used the extended regex to find two vowels used together in the file:
grep -e '[aeiouAEIOU]{2}' error.log
Suggested Read π

10. Specify multiple patterns using the OR operator
You can use the OR operator to specify multiple patterns, which is quite helpful when you want to search for multiple patterns efficiently.
To specify multiple patterns, use the OR operator (|) in the following manner:
grep 'PATTERN_1\|PATTERN_2' FilenameLet's say I wish to look for two patterns: error and Please then I will be using the following:
grep 'error\|Please' error.log
Practice questions π
Practicing is the best way you can learn, and that's why I'm about to share some practice questions for the grep command.
You can use the error.log file which I mentioned at the beginning of this guide to solve the following questions:
- Find the
errorstring from every file present in your working directory. - Find lines that do not contain the term
success. - Search for lines in a file that contain either
errororissue. - Find the term
logby disabling case-sensitive search and redirecting the output to a file. - How do you print only the last 2 results ignoring everything else? (Hint: use the tail command)
If you discover any difficulties solving the above problems, reach out to us through the comments or post your query in our community forum.
You can download a grep command cheat sheet for more examples and info:

Are You An Advanced User? Try ripgrep
The ripgrep command does everything the grep command does but has some additional benefits like performance and features including the ability to search within the zip file.
Sounds cool? Here's how to install and use ripgrep in Linux:

Moreover, if you are new to Linux, I suggest you to also go through our command tutorial for beginners.

π¬Share your thoughts on the command, your experience with it, and what do you prefer as an alternative to grep?

