# Chapter 6. Pattern Matching

#### Contents:

Filenames Versus Patterns
Metacharacters, Listed by Unix Program
Metacharacters
Examples of Searching

A number of Unix text-processing utilities let you search for, and in some cases change, text patterns rather than fixed strings. These utilities include the editing programs `ed`, `ex`, `vi`, and `sed`, the `awk` programming language, and the commands `grep` and `egrep`. Text patterns (formally called regular expressions) contain normal characters mixed with special characters (called metacharacters).

This chapter presents the following topics:

- Filenames versus patterns

- List of metacharacters available to each program

- Description of metacharacters

- Examples

For more information on regular expressions, see Mastering Regular Expressions, listed in the Bibliography.

## 6.1. Filenames Versus Patterns

Metacharacters used in pattern matching are different from metacharacters used for filename expansion (see Chapter 4, and Chapter 5). When you issue a command on the command line, special characters are seen first by the shell, then by the program; therefore, unquoted metacharacters are interpreted by the shell for filename expansion. The command:

>     $ grep [A-Z]* chap[12]

could, for example, be transformed by the shell into:

>     $ grep Array.c Bug.c Comp.c chap1 chap2

and would then try to find the pattern `Array.c` in files `Bug.c`, `Comp.c`, `chap1`, and `chap2`. To bypass the shell and pass the special characters to `grep`, use quotes:

>     $ grep "[A-Z]*" chap[12]

Double quotes suffice in most cases, but single quotes are the safest bet.

Note also that in pattern matching, `?` matches zero or one instance of a regular expression; in filename expansion, `?` matches a single character.

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