[Chapter 6] Pattern Matching
Author: Daniel Gilly & the Staff of O'Reilly & Associates
Date: 1998-08-06T21:59:44Z

#

| Chapter 6 |

# 6. Pattern Matching

Contents:
Filenames Versus Patterns
Metacharacters, Listed by UNIX Program
Metacharacters
Examples of Searching

A number of UNIX text-editing 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 scripting language, and the commands `grep` and `egrep`. Text patterns (also called regular expressions) contain normal characters mixed with special characters (also called metacharacters).

This section presents the following topics:

- Filenames versus patterns

- List of metacharacters available to each program

- Description of metacharacters

- Examples

## 6.1 Filenames Versus Patterns

Metacharacters used in pattern matching are different from metacharacters used for filename expansion (see Sections 4 and 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 interpreted by the shell as:

>     $ 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.)

5.8 Invoking the Shell |  | 6.2 Metacharacters, Listed by UNIX Program