REGULAR EXPRESSIONS
Regular expressions are more or less the same as the Global ones, but are mostly used to search strings ( any sequence of characters ) and to perform changes, within a file. ( We use Global expressions to search files, Regular expressions to search in files )
They are widely used with the following commands: ¨grep¨, ¨egrep¨ and ¨sed¨. Also for searches in the ¨vi¨ editor we use Regular expressions.
We will keep our search limited to ¨grep¨.
NOTE: First 2 striking differences with the Global expressions:
¨?¨ stands for 1 random character in Global expressions, ¨.¨ is the sign for it in Regular expressions.
[! . . . ] stands for ¨not¨ in Global expressions, and [^ . . . ] is what we use in Regular expressions.
In fact, the ¨^¨ has 2 meanings in a regular expression, depending on its place: ¨[^¨ means ¨not¨ , where just ¨^¨ at the beginning of the expression means that the string or word should be at the beginning of the line.
A ¨$¨ at the end of the expression means that the word should be at the end of the line. ( This will all become clear in the examples. )
One more thing: the regular expression always starts and ends with ' ( an apostrophe ).
Grep will search a string of characters specified by the Regular expression and print the lines in which it finds those strings to the screen.
O.K. Here are some simple examples:
CODE |
$ grep -n 'cr[i-z]ft' example-file |
Will print the lines with ¨cruft¨ and ¨croft¨ in it ( with the line numbers )
CODE |
$ grep -n 'sh[^a-h]re' example-file |
Prints the lines with ¨shore¨ and ¨shire¨
CODE |
$ grep -n '^ Fast. *them $' example-file |
Will search for the lines that starts with the word ¨Fast¨ and end with the word ¨them¨
Regular expressions interpret the . \ [ ] * in a special way, so if you want them to be part of the string you look for, you need to use the escape sign: \
Another formula: \{ . . . \} tells grep how many times a character should show: a\{2\} means 2x the ¨a¨
Example: Imagine you have a long list of names and telephone numbers, and you want to search for a name that starts with a ¨B¨ and has 66 in the phone number.
CODE |
$ grep -n '^ B* 6\{2\} * $' phonelist |
Another little hint:
CODE |
$ grep -n 'bat' example-file |
Will find lines with the words ¨bathroom¨, ¨batter¨ and so on.
CODE |
$ grep -n '\<bat\>' example-file |
Only finds the line with the word ¨bat¨ in it
O.K. We had enough complicated stuff let's have some FUN , try this one:
CODE |
$ grep -e '^\(.\)\(.\)$' /usr/share/dict/words |
To find 4 letter palindromes
Or:
CODE |
$ grep -e '^\(.\)\(.\)\(.\)$' /usr/share/dict/words |
To find 6 letter ones
So this gave you a little taste of what a Regular expression is. For a deeper insight see: Here.
Or if you really want to know it all, the ¨Mastering Regular Expressions¨ book at O'Reilly or at your local bookstore.

Bruno
-- Jun 24 2003 ( Revised Dec 10 2005 ) --