When used with grep or egrep, regular expressions should be surrounded by quotes. (If the pattern contains a $
, you must use single quotes; e.g., '
pattern'
.) When used with ed, ex, sed, and awk, regular expressions are usually surrounded by /
, although (except for awk) any delimiter works. The following tables show some example patterns.
Pattern | What Does It Match? |
---|---|
bag | The string bag. |
^bag | bag at the beginning of the line. |
bag$ | bag at the end of the line. |
^bag$ | bag as the only word on the line. |
[Bb]ag | Bag or bag. |
b[aeiou]g | Second letter is a vowel. |
b[^aeiou]g | Second letter is a consonant (or uppercase or symbol). |
b.g | Second letter is any character. |
^...$ | Any line containing exactly three characters. |
^\. | Any line that begins with a dot. |
^\.[a-z][a-z] | Same, followed by two lowercase letters (e.g., troff requests). |
^\.[a-z]\{2\} | Same as previous; ed, grep, and sed only. |
^[^.] | Any line that doesn't begin with a dot. |
bugs* | bug, bugs, bugss, etc. |
"word" | A word in quotes. |
"*word"* | A word, with or without quotes. |
[A-Z][A-Z]* | One or more uppercase letters. |
[A-Z]+ | Same; egrep or awk only. |
[[:upper:]]+ | Same; POSIX egrep or awk. |
[A-Z].* | An uppercase letter, followed by zero or more characters. |
[A-Z]* | Zero or more uppercase letters. |
[a-zA-Z] | Any letter. |
[^0-9A-Za-z] | Any symbol or space (not a letter or a number). |
[^[:alnum:]] | Same, using POSIX character class. |
egrep or awk Pattern | What Does It Match? |
---|---|
[567] | One of the numbers 5, 6, or 7. |
five|six|seven | One of the words five, six, or seven. |
80[2-4]?86 | 8086, 80286, 80386, or 80486. |
80[2-4]?86|(Pentium(-II)?) | 8086, 80286, 80386, 80486, Pentium, or Pentium-II. |
compan(y|ies) | company or companies. |
ex or vi Pattern | What Does It Match? |
---|---|
\<the | Words like theater or the. |
the\> | Words like breathe or the. |
\<the\> | The word the. |
ed, sed or grep Pattern | What Does It Match? |
---|---|
0\{5,\} | Five or more zeros in a row. |
[0-9]\{3\}-[0-9]\{2\}-[0-9]\{4\} | U.S. Social Security number (nnn-nn-nnnn). |
\(why\).*\1 | A line with two occurrences of why. |
\([[:alpha:]_][[:alnum:]_.]*\) = \1; | C/C++ simple assignment statements. |
The examples in Table 6.3 show the metacharacters available to sed or ex. Note that ex commands begin with a colon. A space is marked by a ; a tab is marked by a tab.
Command | Result |
---|---|
s/.*/( & )/ | Redo the entire line, but add parentheses. |
s/.*/mv & &.old/ | Change a wordlist (one word per line) into mv commands. |
/^$/d | Delete blank lines. |
:g/^$/d | Same as previous, in ex editor. |
/^[ tab]*$/d | Delete blank lines, plus lines containing only spaces or tabs. |
:g/^[ tab]*$/d | Same as previous, in ex editor. |
s/*//g | Turn one or more spaces into one space. |
:%s/*//g | Same as previous, in ex editor. |
:s/[0-9]/Item &:/ | Turn a number into an item label (on the current line). |
:s | Repeat the substitution on the first occurrence. |
:& | Same as previous. |
:sg | Same, but for all occurrences on the line. |
:&g | Same as previous. |
:%&g | Repeat the substitution globally (i.e., on all lines). |
:.,$s/Fortran/\U&/g | On current line to last line, change word to uppercase. |
:%s/.*/\L&/ | Lowercase entire file. |
:s/\<./\u&/g | Uppercase first letter of each word on current line. (Useful for titles.) |
:%s/yes/No/g | Globally change a word to No. |
:%s/Yes/~/g | Globally change a different word to No (previous replacement). |
Finally, some sed examples for transposing words. A simple transposition of two words might look like this:
s/die or do/do or die/ Transpose words
The real trick is to use hold buffers to transpose variable patterns. For example:
s/\([Dd]ie\) or \([Dd]o\)/\2 or \1/ Transpose, using hold buffers