grep stands for Globally Search For Regular Expression and Print out. It is a command line tool used in UNIX and Linux systems to search a specified pattern in a file or group of files. grep
comes with a lot of options which allow us to perform various search-related actions on files. In this article, we'll look at how to use grep with the options available as well as basic regular expressions to search files. Without passing any option, grep can be used to search for a pattern in a file or group of files. The syntax is: Note that single or double quotes are required around the text if it is more than one word. You can also use the
wildcard (*) to select all files in a directory. The result of this is the occurences of the pattern (by the line it is found) in the file(s). If there is no match, no output will be printed to the terminal. For example, say we have the following files (called grep.txt): The following grep command will search for all occurences of the word 'you': The result for this is: you is expected to have a different color than the
other text to easily identify what was searched for.
But grep comes with more options which help us achieve more during a search operation. Let's look at nine of them while applying them to the example above.
Options used with grep
1. -n (--line-number) - list line numbers
This prints out the matches for the text along with the line numbers. If you look at the result we have above, you'll notice there are no line numbers, just the matches.
grep you grep.txt -nResult:
1: Hello, how are you 3: Nice to meet you2. -c (--count) - prints the number of lines of matches
grep you grep.txt -cResult:
2Note that if there was another 'you' on line one, option -c would still print 2. This is because it is concerned with the number of lines where the matches appear, not the number of matches.
3. -v (--invert-match) - prints the lines that do not match the specified pattern
grep you grep.txt -v -nResult:
2. I am grepNotice that we also used option -n? Yes, you can apply multiple options in one command.
4. -i (--ignore-case) - used for case insensitivity
# command 1 grep You grep.txt # command 2 grep YoU grep.txt -iResults:
# result 1 # no result # result 2 Hello, how are you Nice to meet you5. -l (--files-with-matches) - print file names that match a pattern
# command 1 grep you grep.txt -l # command 2 grep You grep.txt -i -lResults:
# result 1 grep.txt # result 2 # all files in the current directory that matches # the text 'You' case insensitively #### 6. `-w` (--word-regexp) - print matches of the whole wordBy default, grep matches strings which contain the specified pattern. This means that grep yo grep.txt will print the same results as grep yo grep.txt because 'yo' can be found in you. Similarly, 'ou'.
With the option -w, grep ensures that the matches are exactly the same pattern as specified. Example:
grep yo grep.txt -wResult:
No result!
7. -o (--only-matching) - print only the matched pattern
By default, grep prints the line where the matched pattern is found. With option -o, only the matched pattern is printed line by line. Example:
grep yo grep.txt -oResult:
yo8. -A (--after-context) and -B (--before-context) - print the lines after and before (respectively) the matched pattern
grep grep grep.txt -A 1 -B 1Result:
Hello, how are you I am grep Nice to meet youThis matched pattern is on line 2. -A 1 means one line after the matched line and -B 1 means one line before the matched line.
There's also a -C (--context) option which is equal to -A + -B. The value passed to -C would be used for -A and -B.
9. -R (--dereference-recursive) - recursive search
By default, grep cannot search directories. If you try doing so, you'll get an error ("Is a directory"). With option -R, searching files within directories and subdirectories becomes possible. Example:
grep you .Result:
Regular expressions for patterns
grep also allows basic regular expressions for specifying patterns. Two of them are:
1. ^pattern - start of a line
This pattern means that the grep will match the strings whose lines begin with the string specified after ^. Example:
grep ^I grep.txt -nResult:
2: I2. pattern$ - end of a line
In contrast with ^, $ specifies patterns that will be matched if the line ends with the string before $. Example:
grep you$ grep.txtResult:
1: Hello, how are you 3: Nice to meet youWrap up
grep is a powerful tool for searching files in the terminal. Understanding how to use it gives you the ability to easily find files via the terminal.
There are more options attached to this tool. You can find with man grep.
Learn to code for free. freeCodeCamp's open source curriculum has helped more than 40,000 people get jobs as developers. Get started