sed Command Purpose Provides a stream editor. Syntax sed [ -n ] [ -e Script ... ] [ -f SourceFile ... ] [ File ... ] Description The sed command modifies lines from the specified File according to an edit script and writes them to standard output. The sed command includes many features for selecting lines to be modified and making changes only to the selected lines. The sed command uses two work spaces for holding the line being modified: the pattern space, where the selected line is held; and the hold space, where a line can be stored temporarily. An edit script consists of individual subcommands, each one on a separate line. The general form of sed subcommands is the fol- lowing: [address-range] function[modifiers] The sed command processes each input File by reading an input line into a pattern space, applying all sed subcommands in se- quence whose addresses select that line, and writing the pattern space to standard output. It then clears the pattern space and repeats this process for each line in the input File. Some of the subcommands use a hold space to save all or part of the pat- tern space for subsequent retrieval. When a command includes an address (either a line number or a search pattern), only the addressed line or lines are affected by the command. Otherwise, the command is applied to all lines. An address is either a decimal line number, a $ (dollar sign), which addresses the last line of input, or a context address. A context address is a regular expression similar to those used in the ed command except for the following differences: * You can select the character delimiter for patterns. The gen- eral form of the expression is: \?pattern? where ? (question mark) is a character delimiter you select. You can select any character from the current locale except for the space or new-line character. The \ (backslash) character is re- quired only for the first occurrence of ?. The default form for the pattern is the following: /pattern/ No \ (backslash) character is necessary. * The \n sequence matches a new-line character in the pattern space, except the terminating new line. * A . (period) matches any character except a terminating new- line character. That is, unlike the ed command, which cannot match a new-line character in the middle of a line, the sed com- mand can match a new-line character in the pattern space. Certain commands allow you to specify one line or a range of lines to which the command should be applied. These commands are called addressed commands. The following rules apply to ad- dressed commands: * A command line with no address selects every line. * A command line with one address, expressed in context form, selects each line that matches the address. * A command line with two addresses separated by commas selects the entire range from the first line that matches the first ad- dress through the next line that matches the second. (If the second address is a number less than or equal to the line number first selected, only one line is selected.) Thereafter, the pro- cess is repeated, looking again for the first address. Notes: 1. The Text parameter accompanying the a\, c\, and i\ commands can continue onto more than one line, provided all lines but the last end with a \ (backslash) to quote the new-line character. Backslashes in text are treated like backslashes in the replace- ment string of an s command and can be used to protect initial blanks and tabs against the stripping that is done on every script line. The RFile and WFile parameters must end the command line and must be preceded by exactly one blank. Each WFile is created before processing begins. 2. The sed command can process up to 99 commands in a pattern file. Flags -e Script Uses the Script string as the editing script. If you are using just one -e flag and no -f flag, the -e flag can be om- itted. -f SourceFile Uses SourceFile as the source of the edit script. SourceFile is a prepared set of editing commands to be applied to File. -n Suppresses all information normally written to standard out- put. In the following list of functions, the maximum number of permis- sible addresses for each function is indicated in parentheses. The sed script subcommands are as follows: (1) a\ Text Places Text on the output before reading the next input line. (2)b[label] Branches to the : command bearing the label. If label is empty, it branches to the end of the script. (2)c\ Text Deletes the pattern space. With 0 or 1 address or at the end of a 2-address range, places Text on the output. Then it starts the next cycle. (2)d Deletes the pattern space. Then it starts the next cycle. (2)D Deletes the initial segment of the pattern space through the first new line character. Then it starts the next cycle. (2)g Replaces the contents of the pattern space with the contents of the hold space. (2)G Appends the contents of the hold space to the pattern space. (2)h Replaces the contents of the hold space with the contents of the pattern space. (2)H Appends the contents of the pattern space to the hold space. (1)i\ Text Writes Text to standard output before reading the next line into the pattern space. (2)l Writes the pattern space to standard output showing non- displayable characters as 4-digit hexadecimal values. Long lines are folded. (2)n Writes the pattern space to standard output. It replaces the pattern space with the next line of input. (2)N Appends the next line of input to the pattern space with an embedded new-line character (the current line number changes). You can use this to search for patterns that are split onto two lines. (2)p Writes the pattern space to standard output. (2)P Writes the initial segment of the pattern space through the first new line character to standard output. (1)q Branches to the end of the script. It does not start a new cycle. (2)r RFile Reads the contents of RFile. It places contents on the output before reading the next input line. (2)s/pattern/replacement/flags Substitutes replacement string for the first occurrence of the pattern in the pattern space. Any character that is displayed after the s command can substi- tute for the / (slash) separator except for the space or new-line character. See the "Pattern Matching" section of the ed command. g Substitutes all nonoverlapping instances of the pattern parameter rather than just the first one. n Substitutes for the nth occurrence only of the pattern parame- ter. p Writes the pattern space to standard out if a replacement was made. w WFile Writes the pattern space to WFile if a replacement was made. Appends the pattern space to WFile. If WFile was not al- ready created by a previous write by this sed script, the sed command creates it. (2)tlabel Branches to :label in the script file if any substitu- tions were made since the most recent reading of an input line execution of a t subcommand. If you do not specify label, con- trol transfers to the end of the script. (2)wWFile Appends the pattern space to WFile. (2)x Exchanges the contents of the pattern space and the hold space. (2)y/pattern1/pattern2/ Replaces all occurrences of characters in pattern1 with the corresponding pattern2 characters. The number of characters of pattern1 and pattern2 must be equal. The new-line character is represented by \n. (2)!sed-cmd Applies the specified sed subcommand only to lines not selected by the address or addresses. (0):label This script entry simply marks a branch point to be referenced by the b and t commands. This label can be any se- quence of eight or fewer bytes. (1)= Writes the current line number to standard output as a line. (2){subcmd . . . } Groups subcommands enclosed in {} (braces). (0) Ignores an empty command. (0)# If a # (pound sign) appears as the first character on a line of a script file, that entire line is treated as a comment, with one exception. For the first line of a script file only, if the character after the # is an n, the default output will be suppressed. The rest of the line after the #n is ignored. A script must contain at least one noncomment line. Examples 1. To perform a global change, enter: sed "s/happy/enchanted/g" chap1 >chap1.new This replaces each occurrence of happy found in the file chap1 with enchanted. It puts the edited version in a separate file named chap1.new. The g at the end of the s subcommand tells sed to make as many substitutions as possible on each line. Without the g, sed replaces only the first happy on a line. The sed stream editor operates as a filter. It reads text from standard input or from the files named on the command line (chap1 in this example), modifies this text, and writes it to standard output. Unlike most editors, it does not replace the original file. This makes sed a powerful command when used in pipelines. 2. To use sed as a filter in a pipeline, enter: pr chap2 | sed "s/Page *[0-9]*$/(&)/" | enq This encloses the page numbers in parentheses before printing chap2. The pr command puts a heading and page number at the top of each page, then sed puts the page numbers in parentheses, and the enq command prints the edited listing. The sed pattern /Page *[0-9]*$/ matches page numbers that appear at the end of a line. The s subcommand changes this to (&), where the & stands for the page number that was matched. 3. To display selected lines of a file, enter: sed -n "/food/p" chap3 This displays each line in chap3 that contains the word food. Normally, sed copies every line to standard output after it is edited. The -n flag stops sed from doing this. You then use subcommands like p to write specific parts of the text. Without the -n, this example displays all the lines in chap3, and it shows each line containing food twice. 4. To perform complex editing, enter: sed -f script.sed chap4 >chap4.new It is always a good idea to create a sed script file when you want to do anything complex. You can then test and modify your script before using it. You can also reuse your script to edit other files. Create the script file with an interactive text ed- itor. 5. A sample sed script file: :join /\\$/{N s/\\\n// b join } This sed script joins each line that ends with a \ (backslash) to the line that follows it. First, the pattern /\\$/ selects a line that ends with a \ for the group of commands enclosed in {}. The N subcommand then appends the next line, embedding a new line character. The s/\\\n// deletes the \ and embedded new line character. Finally, b join branches back to the label :join to check for a \ at the end of the newly joined line. Without the branch, the sed command writes the joined line and read the next one before checking for a second \. Note: The N subcommand causes sed to stop immediately if there are no more lines of input (that is, if N reads an end-of-file character). It does not copy the pattern space to standard out- put before stopping. This means that if the last line of the in- put ends with a \, it is not copied to the output. Implementation Specifics This command is part of Base Operating System (BOS) Runtime. Related Information Manipulating Strings with sed. Using Text in Commands. Using String Replacement. National Language Support Overview. The awk command, ed command, grep command.