How to use the grep command in Linux with examples

Overview

In this tutorial, you will learn how to use the grep command in Linux, Unix and OSX, with examples of common use cases.

The grep command in Linux is a utility used to search any given input files for one or more matching words or patterns. It is used to search a single file or an entire directory, including child directories, for a matching string.

Single File Grep Search

To find a word inside of a single file we specify the word we want matched and file to search. For example, to find the word hello in a file named file.txt we would run the following command.

grep "hello" file.txt

Multiple File Grep Search

You may find yourself wanting to search multiple files for a matching string. The grep command allows us to chain multiple files into our search by adding them at the end of the command.

For example, to find the world hello in the files file1, file2, file3 and file4, we would run the command as follows.

grep "hello" file1 file2 file3 file4

Grep will search each file and output the matching line from each.

Ignoring Case

Grep is case sensitive by default. It search for using the exact case specified at the command-line. If do not know the case or want to find all cases, you add the -i flag.

grep -i Student1 ~/class/students

Recursive Directory Searches

The grep command will not recursively search directories by default. To perform a recursive search, where grep finds a string in files of all nested, child directories, you can use the -r or -R flags.

grep -r "error" /var/logs

Grep Searching Multiple Words

Multiple words can be matched against using grep, which is very useful when you’re not sure what you are looking for or want to find multiple items.

To search multiple words, use the | character as a delimination. Each word separated by that character will be matched separately.

For example, to find the words “warning” or “error” in the output of all of your Apache web server logs, you would run the following command.

grep 'warning|error' /var/log/apache2

Counting Matches with Grep

You may be more interested in knowing the number of matches rather than outputting the matches to file or screen. Grep supports counting matches with the -c flag.

grep -c "error" /var/logs/apache2

Inverse Matches with Grep

An inverse match returns results that do not match a word or pattern used with grep. To perform inverse matches with grep use the -v flag.

For example, if you wanted to return all log entries except errors, you would use the following command.

grep -v "error" /var/log/apache2

Ignore Binary Files

If you find yourself wanting to match files from a directory or nested directory, you may want to exclude binary files in your search. To do so use the -I flag.

grep -I -r "student1" /opt/myapp

Show only file names of matches

Grep can output file names only, if you are more interested in finding files with a matching word or pattern inside of them. To output only file names that contain a matching word or pattern, use the -l or --files-with-matches flags in your command.

grep -l -r "student1" /var/logs

Show file names without matches

To output a list of file names that do not contain a matching word or pattern, use the -L or --files-without-match flags.

grep -L "student1" /var/logs