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
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.
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
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
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
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
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
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
--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
grep -L "student1" /var/logs