| .TH SED 1 |
| .SH NAME |
| sed \- stream editor |
| .SH SYNOPSIS |
| .B sed |
| [ |
| .B -gln |
| ] |
| [ |
| .B -e |
| .I script |
| ] |
| [ |
| .B -f |
| .I sfile |
| ] |
| [ |
| .I file ... |
| ] |
| .SH DESCRIPTION |
| .I Sed |
| copies the named |
| .I files |
| (standard input default) to the standard output, |
| edited according to a script of commands. |
| The |
| .B -f |
| option causes the script to be taken from file |
| .IR sfile ; |
| these options accumulate. |
| If there is just one |
| .B -e |
| option and no |
| .BR -f 's, |
| the flag |
| .B -e |
| may be omitted. |
| The |
| .B -n |
| option suppresses the default output; |
| .B -g |
| causes all substitutions to be global, as if suffixed |
| .BR g . |
| The |
| .B -l |
| option causes |
| .I sed |
| to flush its output buffer after every newline. |
| .PP |
| A script consists of editing commands, one per line, |
| of the following form: |
| .IP |
| [\fIaddress\fR [\fL,\fI address\fR] ] \fIfunction\fR [\fIargument\fR ...] |
| .PP |
| In normal operation |
| .I sed |
| cyclically copies a line of input into a |
| .I pattern space |
| (unless there is something left after |
| a |
| .L D |
| command), |
| applies in sequence |
| all commands whose |
| .I addresses |
| select that pattern space, |
| and at the end of the script copies the pattern space |
| to the standard output (except under |
| .BR -n ) |
| and deletes the pattern space. |
| .PP |
| An |
| .I address |
| is either a decimal number that counts |
| input lines cumulatively across files, a |
| .L $ |
| that |
| addresses the last line of input, or a context address, |
| .BI / regular-expression / \f1, |
| in the style of |
| .IR regexp (7), |
| with the added convention that |
| .L \en |
| matches a |
| newline embedded in the pattern space. |
| .PP |
| A command line with no addresses selects every pattern space. |
| .PP |
| A command line with |
| one address selects each pattern space that matches the address. |
| .PP |
| A command line with |
| two addresses selects the inclusive range from the first |
| pattern space that matches the first address through |
| the next pattern space 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 process is repeated, looking again for the |
| first address. |
| .PP |
| Editing commands can be applied to non-selected pattern |
| spaces by use of the negation function |
| .L ! |
| (below). |
| .PP |
| An argument denoted |
| .I text |
| consists of one or more lines, |
| all but the last of which end with |
| .L \e |
| to hide the |
| newline. |
| Backslashes in text are treated like backslashes |
| in the replacement string of an |
| .L s |
| command, |
| and may be used to protect initial blanks and tabs |
| against the stripping that is done on |
| every script line. |
| .PP |
| An argument denoted |
| .I rfile |
| or |
| .I wfile |
| must terminate the command |
| line and must be preceded by exactly one blank. |
| Each |
| .I wfile |
| is created before processing begins. |
| There can be at most 120 distinct |
| .I wfile |
| arguments. |
| .TP \w'\fL!\ \fIfunction\fLXXX'u |
| .B a\e |
| .br |
| .ns |
| .TP |
| .I text |
| Append. |
| Place |
| .I text |
| on the output before |
| reading the next input line. |
| .TP |
| .BI b " label" |
| Branch to the |
| .B : |
| command bearing the |
| .IR label . |
| If |
| .I label |
| is empty, branch to the end of the script. |
| .TP |
| .B c\e |
| .br |
| .ns |
| .TP |
| .I text |
| Change. |
| Delete the pattern space. |
| With 0 or 1 address or at the end of a 2-address range, place |
| .I text |
| on the output. |
| Start the next cycle. |
| .TP |
| .B d |
| Delete the pattern space. |
| Start the next cycle. |
| .TP |
| .B D |
| Delete the initial segment of the |
| pattern space through the first newline. |
| Start the next cycle. |
| .TP |
| .B g |
| Replace the contents of the pattern space |
| by the contents of the hold space. |
| .TP |
| .B G |
| Append the contents of the hold space to the pattern space. |
| .TP |
| .B h |
| Replace the contents of the hold space by the contents of the pattern space. |
| .TP |
| .B H |
| Append the contents of the pattern space to the hold space. |
| .ne 3 |
| .TP |
| .B i\e |
| .br |
| .ns |
| .TP |
| .I text |
| Insert. |
| Place |
| .I text |
| on the standard output. |
| .TP |
| .B n |
| Copy the pattern space to the standard output. |
| Replace the pattern space with the next line of input. |
| .TP |
| .B N |
| Append the next line of input to the pattern space |
| with an embedded newline. |
| (The current line number changes.) |
| .TP |
| .B p |
| Print. |
| Copy the pattern space to the standard output. |
| .TP |
| .B P |
| Copy the initial segment of the pattern space through |
| the first newline to the standard output. |
| .TP |
| .B q |
| Quit. |
| Branch to the end of the script. |
| Do not start a new cycle. |
| .TP |
| .BI r " rfile" |
| Read the contents of |
| .IR rfile . |
| Place them on the output before reading |
| the next input line. |
| .TP |
| .B s/\fIregular-expression\fP/\fIreplacement\fP/\fIflags |
| Substitute the |
| .I replacement |
| string for instances of the |
| .I regular-expression |
| in the pattern space. |
| Any character may be used instead of |
| .LR / . |
| For a fuller description see |
| .IR regexp (7). |
| .I Flags |
| is zero or more of |
| .RS |
| .TP |
| .B g |
| Global. |
| Substitute for all non-overlapping instances of the |
| .I regular expression |
| rather than just the |
| first one. |
| .TP |
| .B p |
| Print the pattern space if a replacement was made. |
| .TP |
| .BI w " wfile" |
| Write. |
| Append the pattern space to |
| .I wfile |
| if a replacement |
| was made. |
| .RE |
| .TP |
| .BI t " label" |
| Test. |
| Branch to the |
| .L : |
| command bearing the |
| .I label |
| if any |
| substitutions have been made since the most recent |
| reading of an input line or execution of a |
| .LR t . |
| If |
| .I label |
| is empty, branch to the end of the script. |
| .TP |
| .B w |
| .I wfile |
| .br |
| Write. |
| Append the pattern space to |
| .IR wfile . |
| .TP |
| .B x |
| Exchange the contents of the pattern and hold spaces. |
| .TP |
| .B y/\fIstring1\fP/\fIstring2\fP/ |
| Transform. |
| Replace all occurrences of characters in |
| .I string1 |
| with the corresponding character in |
| .IR string2 . |
| The lengths of |
| .I |
| string1 |
| and |
| .I string2 |
| must be equal. |
| .TP |
| .BI ! "function" |
| Don't. |
| Apply the |
| .I function |
| (or group, if |
| .I function |
| is |
| .LR { ) |
| only to lines |
| .I not |
| selected by the address(es). |
| .TP |
| .BI : " label" |
| This command does nothing; it bears a |
| .I label |
| for |
| .B b |
| and |
| .B t |
| commands to branch to. |
| .TP |
| .B = |
| Place the current line number on the standard output as a line. |
| .TP |
| .B { |
| Execute the following commands through a matching |
| .L } |
| only when the pattern space is selected. |
| .TP |
| .B " " |
| An empty command is ignored. |
| .ne 4 |
| .SH EXAMPLES |
| .TP |
| .B sed 10q file |
| Print the first 10 lines of the file. |
| .TP |
| .B sed '/^$/d' |
| Delete empty lines from standard input. |
| .TP |
| .B sed 's/UNIX/& system/g' |
| Replace every instance of |
| .L UNIX |
| by |
| .LR "UNIX system" . |
| .PP |
| .EX |
| sed 's/ *$// \fRdrop trailing blanks\fP |
| /^$/d \fRdrop empty lines\fP |
| s/ */\e \fRreplace blanks by newlines\fP |
| /g |
| /^$/d' chapter* |
| .EE |
| .ns |
| .IP |
| Print the files |
| .BR chapter1 , |
| .BR chapter2 , |
| etc. one word to a line. |
| .PP |
| .EX |
| nroff -ms manuscript | sed ' |
| ${ |
| /^$/p \fRif last line of file is empty, print it\fP |
| } |
| //N \fRif current line is empty, append next line\fP |
| /^\en$/D' \fRif two lines are empty, delete the first\fP |
| .EE |
| .ns |
| .IP |
| Delete all but one of each group of empty lines from a |
| formatted manuscript. |
| .SH SOURCE |
| .B \*9/src/cmd/sed.c |
| .SH SEE ALSO |
| .IR ed (1), |
| .IR grep (1), |
| .IR awk (1), |
| .IR lex (1), |
| .IR sam (1), |
| .IR regexp (7) |
| .br |
| L. E. McMahon, |
| `SED \(em A Non-interactive Text Editor', |
| Unix Research System Programmer's Manual, Volume 2. |
| .SH BUGS |
| If input is from a pipe, buffering may consume |
| characters beyond a line on which a |
| .L q |
| command is executed. |