Introduction

This guide details the most useful grep commands for Linux / Unix systems.

After going through all the commands and examples, you will learn how to use grep to search files for text from the terminal.

grep commands in linux

Prerequisites

  • Linux or UNIX-like system
  • Access to a terminal/command line
  • A user with permissions to access the desired files and folders

NOTE: A line does not represent a line of text as viewed on the terminal screen. A line in a text file is a sequence of characters until a line break is introduced. The output of grep commands may contain whole paragraphs unless the search options are refined.


What is the grepCommand?

Grep is an acronym that stands for Global Regular Expression Print.

Grep is a Linux / Unix command line tool used to search for a string of characters in a specified file. The text search pattern is called a regular expression. When it finds a match, it prints the line with the result. The grep command is handy when searching through massive log files.

Using the grep Command

The grep command consists of three parts in its most basic form. The first part starts with grep followed by the pattern that you are searching for. After the string comes the file name that the grep searches through.

The simplest grep command syntax looks like this:

simple syntax sample

The command can contain many options, pattern variations, and file names. Combine as many options as necessary to get the results you need. Below, are the most common grep commands with examples.


Note: Grep is case-sensitive. Make sure to use the correct case when running grep commands.


To Search a File

To print any line from a file that contains a specific pattern of characters, in our case phoenix in the file sample2, run the command:

grep phoenix sample2

Grep will display every line where there is a match for the word phoenix. When executing this command, you will not get exact matches. Instead, the terminal prints the lines with words containing the string of characters you entered. Here is an example:

greg command example of words containing the string of characters you entered

TIP: If your search pattern includes characters other than alphanumeric, use quotation marks. This includes blank spaces or any symbol.

To Search Multiple Files

To search multiple files with the grep command insert the filenames you want to search, separated with a space.

In our case, the grep command to match the word phoenix in three files sample,sample2, and sample3 looks like this example:

grep phoenix sample sample2 sample3

The terminal prints the name of every file that contains the matching lines, and the actual lines that include the required string of characters.

searching multiple files with grep command

You can append as many filenames as needed. The terminal prints a new line with the filename for every match it finds in the listed files.

Search All Files in Folder

To search all files in the current folder, use an asterisk instead of a filename at the end of a grep command.

In this example, we use nix as search criteria:

grep nix *

The output shows the name of the file with nix and returns the entire line.

To Find Whole Words Only

Grep allows you to find and print the results for whole words only. To search for the word phoenix in all files in the current directory, append –w to the grep command.

grep -w phoenix *

This will only print the lines with whole word matches and the names of the files it found them in:

greg example to print lines with whole word matches

When –w is omitted, grep displays the search pattern even if it is a substring of another word.

To Ignore Case in Grep Searches

As grep commands are case sensitive, one of the most useful operators for grep searches is -i. Instead of printing lowercase results only, the terminal displays both uppercase and lowercase results. This includes lines with mixed case entries.

An example for this command:

grep -i phoenix *

If we use the -i operator to search files in the current directory for phoenix, the output looks like this:

using the i operator to search files

To Search Subdirectories

To include all subdirectories in a search, add the -r operator to the grep command.

grep -r phoenix *

This command prints the matches for all files in the current directory, subdirectories and the exact path with the filename. In the example below, we also added the -w operator to show whole words, but the output form is the same. example of grep including all subdirectories in a search

Inverse grep Search

You can use grep to print all lines that do not match a specific pattern of characters. To invert the search, append -v to a grep command.

To exclude all lines that contain phoenix, enter:

grep -v phoenix sample

The terminal prints all lines that do not contain the word used as a search criterion. Use -i to ignore case to exclude completely the word used for this search:

example of excluding lines

To Show Lines That Exactly Match a Search String

The grep command prints entire lines when it finds a match in a file. To print only those lines that completely match the search string, add the -x option.

grep -x “phoenix number3” *

The output shows only the lines with the exact match. If there are any other words or characters in the same line, the grep does not include it in the search results. Do not forget to use quotation marks whenever there is a space or a symbol in a search pattern.

Here is a comparison of the results without and with the -x operator in our grep command:

comparison with the x operator in grep command

To List Names of Matching Files

Sometimes, you only need to see the names of the files that contain a word or string of characters and exclude the actual lines. To print only the filenames that match your search, use the -l operator:

grep -l phoenix *

The output shows the exact filenames that contain phoenix in the current folder, but does not print the lines with the corresponding word:  find files that contain a word or string of characters excluding the actual lines

As a reminder, use the recursive search operator -r to include all subdirectories in your search.

To Count the Number of Matches

Grep can display the filenames and the count of lines where it finds a match for your word.

Use the -c operator to count the number of matches:

grep -c phoenix *

counting the total number of matches of a search

To Display the Number of Lines Before or After a Search String

Sometimes you need more content in search results to decide what is most relevant.

Use the following operators to add the desired lines before or after a match, or both:

  • Use –A and a number of lines to display after a match: grep –A 3 phoenix sample this command prints three lines after the match.
  • Use –B and a number of lines to display before a match: grep –B 2 phoenix sample this command prints two lines before the match.
  • Use –C and a number of lines to display before and after the match: grep –C 2 phoenix sample this command prints two lines before and after the match.

To Display Line Numbers with grep Matches

When grep prints results with many matches, it comes handy to see the line numbers. Append the -n operator to any grep command to show the line numbers.

We will search for Phoenix in the current directory, show two lines before and after the matches along with their line numbers.

grep –n –C 2 Phoenix sample

displaying two lines before and after the matches

Limit grep Output to a Fixed Number of Lines

Individual files, such as log files, can contain many matches for grep search patterns. Limit the number of lines in the grep output by adding the -m option and a number to the command.

grep –m2 Phoenix sample

In this case, the terminal prints the first two matches it finds in the sample file.

If you do not specify a file and search all files in a directory, the output prints first two results from every file along with the filename that contains the matches.

Conclusion

Now you know how to use the grep command in Linux/Unix.

The grep command is highly flexible with many useful operators and options. By combining grep commands, you can get powerful results and find the text hiding in thousands of files.