Book HomeBook TitleSearch this book

6.4. Examples of Searching

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.

6.4.1. General patterns

PatternWhat Does It Match?
bagThe string bag.
^bagbag at the beginning of the line.
bag$bag at the end of the line.
^bag$bag as the only word on the line.
[Bb]agBag or bag.
b[aeiou]gSecond 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.

6.4.2. Egrep and awk patterns

egrep or awk PatternWhat Does It Match?
[567]One of the numbers 5, 6, or 7.
five|six|sevenOne 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.

6.4.3. Ex and vi patterns

ex or vi PatternWhat Does It Match?
\<theWords like theater or the.
the\>Words like breathe or the.
\<the\>The word the.

6.4.4. Ed, sed and grep patterns

ed, sed or grep PatternWhat 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.5. Examples of Searching and Replacing

The examples in Table 6-6 show the metacharacters available to sed or ex. Note that ex commands begin with a colon. A space is marked by a Figure ; a tab is marked by a tab.

Table 6-6. Searching and Replacing

CommandResult
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.

/^[Figure tab]*$/d

Delete blank lines, plus lines containing only spaces or tabs.

:g/^[Figure tab]*$/d

Same as previous, in ex editor.

s/Figure Figure */Figure /g

Turn one or more spaces into one space.

:%s/Figure Figure */Figure /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



Library Navigation Links

Copyright © 2003 O'Reilly & Associates. All rights reserved.