We can use the grep tool provided by linux to find matching
rows based on either the basic or extended regular
expressions.
Options for grep and egrep command
Here are some options for grep and egrep commands.
Matcher Selection
Option
Meaning
-E or ‑‑extended-grep
Treat the PATTERNS as extended regular expressions.
-F or ‑‑fixed-strings
Treat the PATTERNS as fixed strings instead of regular
expressions.
-G or ‑‑basic-regexp
Treat the PATTERNS as basic regular expressions.
-P or ‑‑perl-regexp
Treat the PATTERNS as Perl-compatible regular
expressions (PCREs).
Matching Control
Option
Meaning
-e PATTERNS or ‑‑regexp=PATTERNS
Use PATTERNS as the patterns.
-f FILE or ‑‑file=FILE
Obtain patterns from FILE, this can be used multiple
times or combined with the -e (‑‑regexp)
option.
-i or ‑‑ignore-case
Ignore case sensitivity, this matches upper and lower
cases.
-v or ‑‑invert-match
Output the non-matching lines.
-w or ‑‑word-regexp
Output only lines that match the entire word and have no
effect when used with the -x option.
-x or ‑‑line-regexp
Output only lines that match the entire line.
General Output Control
Option
Meaning
-c or ‑‑count
Outputs the number of rows that match or does not match
rather than the contents of the output line.
‑‑color[=WHEN] or
‑‑colour[=WHEN]
Identify the matching content with color. WHEN could be
never, always, or auto.
-m NUM or ‑‑max-count=NUM
Output the first NUM matches and ignore the followings.
-o or ‑‑only-matching
Output only what matches, and output them on different
lines.
-q or ‑‑quiet or ‑‑silent
If there is a content match, the exit code is 0, and if
there is no content to match, the exit code is 1.
-s or ‑‑no-message
Suppress error messages such as File not present or File
unreadable.
Output Line Prefix Control
Option
Meaning
-n or ‑‑line-number
Prefix the line number for each line that matches or
does not match.
Context Line Control
Option
Meaning
-A NUM or ‑‑after-context=NUM
This will use the ‑‑ separator to separate
adjacent matching groups.
-B NUM or ‑‑before-context=NUM
This will use the ‑‑ separator to separate
adjacent matching groups.
-C NUM or ‑‑context=NUM
This will use the ‑‑ separator to separate
adjacent matching groups.
Regular Expressions
Here are some regular expressions for grep command.
Character Classes and Bracket Expressions
Option
Meaning
[0123456789] or [0-9] or [:digit:]
Match any single digit.
[:alnum:] or [0-9A-Za-z]
Match any single alphabet and digit.
[:alpha:] or [A-Za-z]
Match any single alphabet.
[:lower:]
Match any single lower case alphabet.
[:upper:]
Match any single upper case alphabet.
[:punct:]
Match any punctuation.
[:space:]
Match any empty space.
Anchoring
Option
Meaning
^
Match the empty string at the beginning of a line.
$
Match the empty string at the end of a line.
The Backslash Character and Special Expressions
Option
Meaning
\<
Match the empty string at the beginning of a word.
\>
Match the empty string at the end of a word.
\b
Match the empty string at the end of a word.
\B
Match the empty string if it is not at the end of a
word.
Repetition
Option
Meaning
.
Match any single character.
?
Match preceding item at most once and its optional.
*
Match preceding item zero or more times.
+
Match preceding item one or more items.
{n}
Match preceding item exactly n times.
{n,}
Match preceding item exactly n or more times
{,m}
Match preceding item at most m times.
{n,m}
Match preceding item at least n times, but not more than
m times.
Alternation
Option
Meaning
|
Matches the values on both sides of the pipe from left
to right and returns with one match.
Back References and Subexpressions
Option
Meaning
\n
n is a digit refers to the nth group of matching groups.
Basic vs Extended Regular Expressions
Used in Basic
Used in Extended
\?
?
\+
+
\{
{
\|
|
\(
(
\)
)
Basic Regular Expression Examples
Before we get started, let’s prepare some test content:
1
2
3
4
5
6
7
8
9
10
11
12
printf'%s\n'\
'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam nisi tellus,'\
'egestas sed dolor nec, eleifend venenatis mi. Mauris ac ligula'\
'scelerisque libero interdum varius. Aenean nec arcu nec turpis'\
'commodo mollis. Morbi suscipit felis libero, eu sollicitudin justo'\
'condimentum id. Praesent eu metus rutrum, varius leo malesuada,'\
'varius sapien. Vestibulum blandit, dolor bibendum bibendum ultricies,'\
'ipsum velit pretium arcu, eu maximus augue massa vitae justo. Etiam'\
'elit sapien, placerat quis libero a, tincidunt ornare erat. Praesent eu nibh'\
'ac sem mattis tincidunt. Aliquam erat volutpat. Nulla egestas dui ac urna'\
'convallis, vel egestas lectus ultrices. Morbi sit amet quam eget tortor'\
'laoreet laoreet id non libero.' > grep_file
Match Lines Start With Specified Content
1
cat vim_file | grep '^e'
Match Lines End With Specified Content
1
cat vim_file | grep 'a$'
Match Lines Contain Either of the Specified Words
1
cat vim_file | grep 'do\|ma'# The backslash(\) is needed in basic regular expression
Extended Regular Expression Examples
The command egrep is equivalent to grep -E.
Before we get started, let’s prepare some test content:
1
2
3
4
5
6
printf'%s\n'\
'These are IPs for related computers'\
'PC1 IP is: 192.168.0.1'\
'PC2 IP is: 192.168.1.2'\
'PC3 IP is: 192.168.10.255'\
'PC4 IP is: unknown' > egrep_file
Match IPv4 Addresses
Match Numbers Between 0 and 255
This expression matches between 0 and 255 and any number
between them: