123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393 |
- .TH SED 1
- .SH NAME
- sed \- stream editor
- .SH SYNOPSIS
- .B sed
- [
- .B -n
- ]
- [
- .B -g
- ]
- [
- .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 option
- .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 .
- .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 ...] [\fL;\fP]
- .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 (6),
- 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\fL'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,
- as per
- .I regsub
- in
- .IR regexp (2).
- Any character may be used instead of
- .LR / .
- For a fuller description see
- .IR regexp (6).
- .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.
- .TF "w\fI wfile "
- .PD
- .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
- .BI w " wfile"
- 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
- .B #
- Comment.
- Ignore the rest of the line.
- .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 /sys/src/cmd/sed.c
- .SH SEE ALSO
- .IR ed (1),
- .IR grep (1),
- .IR awk (1),
- .IR lex (1),
- .IR sam (1),
- .IR regexp (6)
- .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.
|