## 10.3. Syntax of sed Commands

`sed` commands have the general form:

>     [address[,address]][!]command [arguments]

`sed` copies each line of input into the pattern space. `sed` instructions consist of addresses and editing commands. If the address of the command matches the line in the pattern space, the command is applied to that line. If a command has no address, it is applied to each input line. If a command changes the contents of the pattern space, subsequent commands and addresses are applied to the current line in the pattern space, not the original input line.

commands consist of a single letter or symbol; they are described later, alphabetically and by group. arguments include the label supplied to `b` or `t`, the filename supplied to `r` or `w`, and the substitution flags for `s`. addresses are described below.

### 10.3.1. Pattern Addressing

A `sed` command can specify zero, one, or two addresses. An address can be a line number, the symbol `$` (for last line), or a regular expression enclosed in slashes (/pattern/). Regular expressions are described in Chapter 6. Additionally, `\n` matches any newline in the pattern space (resulting from the `N` command), but not the newline at the end of the pattern space.

If the Command Specifies: | Then the Command is Applied to:
--- | ---
No address | Each input line.
One address | Any line matching the address. Some commands accept only one address: `a`, `i`, `r`, `q`, and `=`.
Two comma-separated addresses | First matching line and all succeeding lines up to and including a line matching the second address.
An address followed by `!` | All lines that do not match the address.

### 10.3.2. Examples

`s/xx/yy/g` | Substitute on all lines (all occurrences).
`/BSD/d` | Delete lines containing `BSD`.
`/^BEGIN/,/^END/p` | Print between `BEGIN` and `END`, inclusive.
`/SAVE/!d` | Delete any line that doesn't contain `SAVE`.
`/BEGIN/,/END/!s/xx/yy/g` | Substitute on all lines, except between `BEGIN` and `END`.

Braces (`{}`) are used in `sed` to nest one address inside another or to apply multiple commands at the same address.

>     [/pattern/[,/pattern/]]{
>     command1
>     command2
>     }

The opening curly brace must end its line, and the closing curly brace must be on a line by itself. Be sure there are no spaces after the braces.

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