A regular expression is a description of a set of characters. This description
can be used to search through a file by looking for text that matches
the regular expression. Regular expressions are analogous to shell wildcards
(see section 6.6 on page ), but they are both
more complicated and more powerful.
A regular expression is made up of text and metacharacters. A metacharacter
is just a character with a special meaning. Metacharacters include the following:
. *  - \^ $.
If a regular expression contains only text (no metacharacters), it matches that
text. For example, the regular expression ``my regular expression''
matches the text ``my regular expression,'' and nothing else. Regular
expressions are usually case sensitive.
You can use the egrep command to display all lines in a file that contain
a regular expression. Its syntax is as follows:
egrep 'regexp' filename1 ...
The single quotation marks are not always needed, but they never hurt.
For example, to find all lines in the GPL that contain the word GNU, you type
egrep 'GNU' /usr/doc/copyright/GPL
egrep will print the lines to standard output.
If you want all lines that contain freedom followed by some indeterminate
text, followed by GNU, you can do this:
egrep 'freedom.*GNU' /usr/doc/copyright/GPL
The . means ``any character,'' and the * means ``zero
or more of the preceding thing,'' in this case ``zero or more of any character.''
So .* matches pretty much any text at all. egrep only matches
on a line-by-line basis, so freedom and GNU have to be on
the same line.
Here's a summary of regular expression metacharacters:
Matches any single character except newline.
Matches zero or more occurrences of the preceding thing. So the
expression a* matches zero or more lowercase a, and .*
matches zero or more characters.
The brackets must contain
one or more characters; the whole bracketed expression matches exactly one character
out of the set. So [abc]matches one a, one b, or one c; it does
not match zero characters, and it does not match a character other than these
Anchors your search at the beginning of the line. The expression
^The matches The when it appears at the beginning of a
line; there can't be spaces or other text before The. If you want to
allow spaces, you can permit 0 or more space characters like this: ^
Anchors at the end of the line. end$ requires the text
end to be at the end of the line, with no intervening spaces or text.
This reverses the sense
of a bracketed character list. So [^abc] matches any single
character, except a, b, or c.
can include ranges in a bracketed character list. To match any lowercase letter,
use [a-z]. You can have more than one range; so to match the first
three or last three letters of the alphabet, try [a-cx-z]. To get
any letter, any case, try [a-zA-Z]. You can mix ranges with single
characters and with the ^metacharacter; for example, [^a-zBZ]means
``anything except a lowercase letter, capital B, or capital Z.''
You can use parentheses to group parts of the regular expression,
just as you do in a mathematical expression.
|means ``or.'' You can use it to provide a series of
alternative expressions. Usually you want to put the alternatives in parentheses,
like this: c(ad|ab|at)matches cad or cab or cat. Without the parentheses,
it would match cad or ab or at instead
Escapes any special characters; if you want to find
a literal *, you type \*. The slash means
to ignore *'s usual special meaning.
Here are some more examples to help you get a feel for things:
matches cope, cape, caper.
matches c.pe, c.per.
matches stp, stop, stoop.
matches carton, cartoon, carmen.
matches xyz and anything after it; some tools, like egrep,
only match until the end of the line.
matches The at the beginning of a line.
matches atime at the end of a line.
matches a line that consists solely of the word Only -
no spaces, no other characters, nothing. Only Only is allowed.
matches barn, born, burn.
matches VerD, VerE, VerF.
matches Ver followed by any non-digit.
matches their, therr, there, theie.
matches any word which consists of only
letters, and at least one letter. It will not match numbers or spaces.