3.1.2. Escape characters on the right side of "s///"
The right-hand side (the replacement part) in "s/find/replace/" is
almost always a string literal, with no interpolation of these
metacharacters:
. ^ $ [ ] { } ( ) ? + *
Three things are interpolated: ampersand (&), backreferences, and
options for special seds. An ampersand on the RHS is replaced by
the entire expression matched on the LHS. There is never any
reason to use grouping like this:
s/\(some-complex-regex\)/one two \1 three/
since you can do this instead:
s/some-complex-regex/one two & three/
To enter a literal ampersand on the RHS, type '\&'.
Grouping and backreferences: All versions of sed support grouping
and backreferences on the LHS and backreferences only on the RHS.
Grouping allows a series of characters to be collected in a set,
indicating the boundaries of the set with \( and \). Then the set
can be designated to be repeated a certain number of times
\(like this\)* or \(like this\)\{5,7\}.
Groups can also be nested "\(like \(this\) is here\)" and may
contain any valid RE. Backreferences repeat the contents of a
particular group, using a backslash and a digit (1-9) for each
corresponding group. In other words, "/\(pom\)\1/" is another way
of writing "/pompom/". If groups are nested, backreference numbers
are counted by matching \( in strict left to right order. Thus,
/..\(the \(word\)\) \("foo"\)../ is matched by the backreference
\3. Backreferences can be used in the LHS, the RHS, and in normal
RE addressing (see section 3.3). Thus,
/\(.\)\1\(.\)\2\(.\)\3/; # matches "bookkeeper"
/^\(.\)\(.\)\(.\)\3\2\1$/; # finds 6-letter palindromes
Seds differ in how they treat invalid backreferences where no
corresponding group occurs. To insert a literal ampersand or
backslash into the RHS, prefix it with a backslash: \& or \\.
ssed, sed16, and sedmod permit additional options on the RHS. They
all support changing part of the replacement string to upper case
(\u or \U), lower case (\l or \L), or to end case conversion (\E).
Both sed16 and sedmod support awk-style word references ($1, $2,
$3, ...) and $0 to insert the entire line before conversion.
echo ab ghi | sed16 "s/.*/$0 - \U$2/" # prints "ab ghi - GHI"
*Note:* This feature of sed16 and sedmod will break sed scripts which
put a dollar sign and digit into the RHS. Though this is an unlikely
combination, it's worth remembering if you use other people's scripts.