When used with
grep
or
egrep
, regular expressions are 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 any delimiter works). Here are some example patterns:
| Pattern | What does it match? |
|---|---|
| bag | The string bag . |
| ^bag | bag at beginning of line. |
| bag$ | bag at end of line. |
| ^bag$ | bag as the only word on 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,
grep
or 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. |
| [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 (not a letter or a number). |
| 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[23]?86 | 8086 , 80286 , or 80386 |
| 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 . |
| 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\} | Social security number ( nnn - nn - nnnn ). |
The following examples 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
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 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. |
| :.,$s/Fortran/\U&/g | Change word to uppercase, on current line to last line. |
| :%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.