Linux Basics – grep with variations
In this Linux Basics article, we will have a look at the
grep command and its variants,
egrep (Extended grep),
fgrep (Fixed grep),
pgrep (Process grep) and
rgrep (Recursive grep). We asked our HOSTAFRICA Linux specialist a few questions and this is what he had to say.
Q: What does it do?
A: It finds all lines of text that contain an expression.
Q: Where does a strange name like grep come from?
A: It does seem quite appropriate if we associate it with the word grab, but in truth, it is an abbreviation for Global Regular Expression Print. This is because the
grep command uses “Basic Regular Expressions” as well as normal strings as a search pattern. In Basic Regular Expressions (BRE), meta-characters like:
'?' lose their meaning and are treated as normal characters and need to be escaped if they are to be treated as special characters.
Q: How do we use grep?
A: If we had a file called sample.txt containing the following (note the last line is blank):
The quick brown fox jumped over the lazy dog .
Then the following lines show how the
grep command may be used:
# Show the line containing an x grep x sample.txt fox # Show all lines with spaces grep ' ' sample.txt The quick jumped over the lazy # Show empty lines grep ^$ sample.txt # Show all non-empty lines (-v turns it into a negative - NOT containing search string) grep -v ^$ sample.txt The quick brown fox jumped over the lazy dog . # Show lines starting with the letter t, but ignore the case ( -i ) grep -i ^t sample.txt The quick the lazy
This is just a small sample of what can be done with just the basic
Q: What is the egrep command?
egrep command is basically an alias for
grep -E or extended grep. This commands allows you to use regular expressions in your search and they will be interpreted as such. With the normal
grep, regular expressions are regards as part of the search string unless escaped with a backslash (
Here are a few examples using
# Show lines containing 'x' or 'z' egrep 'x|z' sample.txt fox the lazy # Show lines containg the word 'the', with the options of a capital or lowercase 't' egrep [Tt]he sample.txt The quick the lazy # a longer way to do the same as above egrep 'The|the' sample.txt The quick the lazy
Q: And the fgrep command?
A: This should actually be the default for anyone starting to learn these commands. The
fgrep command is an alias for
grep -F and is called fixed grep. This version of grep will ignore any strange expressions and always search for exactly the string you ask it to find.
fgrep [Tt]he sample.txt will search for the text “[Tt]he” in the sample file. This search then gives us a zero result as this string does not exist in the sample.txt file.
Q: What about the rgrep command?
A: This command is an alias for
grep -r. It is called recursive grep. This is useful to find all files containing an expression. Here is an example using our sample.txt file:
grep -r "the lazy" ./*.txt ./sample.txt:the lazy
Q: Does the pgrep command fit in here?
A: No. This is not a, strictly speaking, part of the
grep family as it forms part of the process control command set. The
pgrep command is used to return a PID or Process ID of a process that contains the search string in its name.
In our next exciting Linux Basics article, we will chat about the sed command and see what we can say about it!
Be sure to checkout our more in-depth grep command article which includes examples, flags and more.