This tutorial will show you how to use the grep command. It is one of the most widely used and powerful commands on Linux and Unix-like operating systems. The ‘grep’ command is used to search a given file for patterns specified by the user.
Basically ‘grep’ lets you enter a pattern of text and then it searches for this pattern within the text that you provide it. It returns all the lines that have the given pattern or string in them.
In programming a ‘string’ is a sequence of symbols or characters, eg. “This is a string”. Strings typically must be enclosed in quotations to ensure the program correctly recognizes them as strings and not a number or variable name.
A line of text is defined in this context not as what appears as a line of text on the display screen but rather as all text between two newline characters. Newline characters are invisible characters that are represented in Unix-like operating systems by a backslash followed by the letter n and which are created when a user presses the ENTER key when using a text editor (such as gedit). Thus, a line of text returned by grep can be as short as a single character or occupy many lines on the display screen.
Grep Command Syntax:
grep [options] PATTERN [FILE…] grep [options] [-e PATTERN | -f FILE] [FILE…]
Examples of using ‘grep’
grep foo /file/name
Searches the file /file/name for the word ‘foo’. Each match will be displayed on a separate line.
grep -i “foo” /file/name
The option -i can be helpful Searches /file/name for ‘foo’ ignoring case of the word, ie foo Foo FOO etc.
grep ‘error 123’ /file/name
grep is not limited to searching for just single words or strings. It can also search for sequences of strings, including phrases. This is achieved by enclosing the sequence of strings that forms the pattern in quotation marks (either single or double). The example above will search for the phrase ‘error 123’ in the file /file/name.
grep -r “192.168.1.5” /etc/
grep’s search area can be broadened further by using its -r option to search recursively through an entire directory tree (i.e. a directory and all sub-directories within it). The example above searches all files in the /etc/ directory and all of its sub-directories (including their sub-directories) for the string ‘192.168.1.5’
grep -w “foo” /file/name
When you search for foo, grep will match fooboo, foo123, etc. You can force grep to select only those lines containing matches that form whole words by using the -w option.
egrep -w ‘word1|word2’ /file/name
Searches for, and displays 2 different words in /file/name
grep -c test /file/name
The -c option causes grep to only report the number of times that the pattern has been matched for each file, and to not display the actual lines. The example above would show the total number of times that the string “test” appears in the file /file/name.
grep –context=6 error /file/name.txt
Sometimes we are not just interested in the matching line but also on the lines around matching lines, this is where the grep –context option is useful. It can be particularly helpful to see what happens before or after any Error or Exception. In the example above the –context option is used to print the 6 lines before and after a matching line with the word “error” in /file/name.txt
Above are some simple examples to get you started using the grep command. The search functionality of grep can be refined further through the use of ‘regular expressions’. This is a pattern matching system that uses strings constructed according to pre-defined rules to find desired patterns in text. Additional information about grep, including its use with regular expressions, can be obtained from its built-in manual page by using the ‘man’ command, i.e.,