[Chapter 34] 34.8 Newlines in a sed Replacement
Author: Jerry Peek, Tim O'Reilly & Mike Loukides
Date: 1998-08-04T21:47:16Z

#

| Chapter 34 The sed Stream Editor |

## 34.8 Newlines in a sed Replacement

The backslash (`\`) in the replacement string of the sed substitution command is generally used to escape other metacharacters, but it is also used to include a newline in a replacement string.

Given the following input line where each item is separated by a tab:

>     Column1     Column2    Column3     Column4

we can replace the second tab character on each line with a newline character:

    2
    s/[TAB]/\
    /2

Note that no spaces are permitted after the backslash. This script produces the following result:

>     Column1     Column2
>     Column3     Column4

Another example comes from the conversion of a file for troff to an ASCII input format for Ventura Publisher(TM). It converts the following line for troff:

>     .Ah "Major Heading"

to a similar line for Ventura:

>     @A HEAD = Major Heading

The twist in this problem is that the line needs to be preceded and followed by a blank line. It is an example of writing a multiline replacement string:

>     /^\.Ah/{
>     s/\.Ah */\
>     \
>     @A HEAD = /
>     s/"//g
>     s/$/\
>     /
>     }

The first substitute command replaces `.Ah` with two newlines and `@A HEAD =` . Each backslash at the end of the line is necessary to escape the newline. The second substitution removes the quotation marks. The last command matches the end of line in the pattern space (not the embedded newlines) and adds a newline after it.

- DD from O'Reilly & Associates' sed & awk, Chapter 5

34.7 Delimiting a Regular Expression |  | 34.9 Referencing the Search String in a Replacement