Mac OS X Tiger in a Nutshell: A Desktop Quick Reference (In a Nutshell (OReilly))
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. Tables 6-6 through Table 6-9 show some example patterns.
Table 6-6. General search patterns
| Pattern | What does it match? |
|---|---|
| bag | The string bag anywhere in the line |
| ^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 anywhere in the line. |
| b[aeiou]g | b , a vowel, and g . |
| b[^aeiou]g | b , a consonant (or uppercase or symbol), and g . |
| b.g | b , any character, and g . |
| ^...$ | 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, anywhere on the line |
| "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. |
Table 6-7. egrep and awk search patterns
| egrep or awk pattern | What does it match? |
|---|---|
| [567] | One of the digits 5 , 6 , or 7 . |
| fivesixseven | 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(yies) | company or companies . |
Table 6-8. ex and vi search patterns
| ex or vi pattern | What does it match? |
|---|---|
| \<the | Words like theater or the . |
| the\> | Words like breathe or the . |
| \<the\> | The word the . |
Table 6-9. ed, sed and grep search patterns
| 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. |
6.4.1. Examples of Searching and Replacing
The examples in Table 6-10 show the metacharacters available to sed and vi . We have shown vi commands with an initial colon because that is how they are invoked with vi . A space is marked by a
Table 6-10. Searching and replacing
| Command | Result |
|---|---|
| s/.*/( & )/ | Redo the entire line, but add parentheses. |
| s/.*/mv & &.old/ | Change a word list (one word per line) into mv commands. |
| /^$/d | Delete blank lines. |
| :g/^$/d | Same as previous, in vi editor. |
| /^[ | Delete blank lines, plus lines containing only spaces or tabs. |
| :g/^[ | Same as previous, in vi editor. |
| s/ | Turn one or more spaces into one space. |
| :%s/ | 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, here are 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\)/ or / Transpose, using hold buffers