summaryrefslogtreecommitdiffstats
path: root/man-pages-posix-2003/man1p/sed.1p
diff options
context:
space:
mode:
Diffstat (limited to 'man-pages-posix-2003/man1p/sed.1p')
-rw-r--r--man-pages-posix-2003/man1p/sed.1p738
1 files changed, 738 insertions, 0 deletions
diff --git a/man-pages-posix-2003/man1p/sed.1p b/man-pages-posix-2003/man1p/sed.1p
new file mode 100644
index 0000000..243e5e7
--- /dev/null
+++ b/man-pages-posix-2003/man1p/sed.1p
@@ -0,0 +1,738 @@
+.\" Copyright (c) 2001-2003 The Open Group, All Rights Reserved
+.TH "SED" 1P 2003 "IEEE/The Open Group" "POSIX Programmer's Manual"
+.\" sed
+.SH PROLOG
+This manual page is part of the POSIX Programmer's Manual.
+The Linux implementation of this interface may differ (consult
+the corresponding Linux manual page for details of Linux behavior),
+or the interface may not be implemented on Linux.
+.SH NAME
+sed \- stream editor
+.SH SYNOPSIS
+.LP
+\fBsed\fP \fB[\fP\fB-n\fP\fB]\fP \fIscript\fP\fB[\fP\fIfile\fP\fB...\fP\fB]\fP\fB
+.br
+.sp
+sed\fP \fB[\fP\fB-n\fP\fB][\fP\fB-e\fP \fIscript\fP\fB]\fP\fB...\fP\fB[\fP\fB-f\fP
+\fIscript_file\fP\fB]\fP\fB...\fP\fB[\fP\fIfile\fP\fB...\fP\fB]\fP\fB
+.br
+\fP
+.SH DESCRIPTION
+.LP
+The \fIsed\fP utility is a stream editor that shall read one or more
+text files, make editing changes according to a script of
+editing commands, and write the results to standard output. The script
+shall be obtained from either the \fIscript\fP operand
+string or a combination of the option-arguments from the \fB-e\fP
+\fIscript\fP and \fB-f\fP \fIscript_file\fP options.
+.SH OPTIONS
+.LP
+The \fIsed\fP utility shall conform to the Base Definitions volume
+of IEEE\ Std\ 1003.1-2001, Section 12.2, Utility Syntax Guidelines,
+except that the order of presentation of the
+\fB-e\fP and \fB-f\fP options is significant.
+.LP
+The following options shall be supported:
+.TP 7
+\fB-e\ \fP \fIscript\fP
+Add the editing commands specified by the \fIscript\fP option-argument
+to the end of the script of editing commands. The
+\fIscript\fP option-argument shall have the same properties as the
+\fIscript\fP operand, described in the OPERANDS section.
+.TP 7
+\fB-f\ \fP \fIscript_file\fP
+Add the editing commands in the file \fIscript_file\fP to the end
+of the script.
+.TP 7
+\fB-n\fP
+Suppress the default output (in which each line, after it is examined
+for editing, is written to standard output). Only lines
+explicitly selected for output are written.
+.sp
+.LP
+Multiple \fB-e\fP and \fB-f\fP options may be specified. All commands
+shall be added to the script in the order specified,
+regardless of their origin.
+.SH OPERANDS
+.LP
+The following operands shall be supported:
+.TP 7
+\fIfile\fP
+A pathname of a file whose contents are read and edited. If multiple
+\fIfile\fP operands are specified, the named files shall
+be read in the order specified and the concatenation shall be edited.
+If no \fIfile\fP operands are specified, the standard input
+shall be used.
+.TP 7
+\fIscript\fP
+A string to be used as the script of editing commands. The application
+shall not present a \fIscript\fP that violates the
+restrictions of a text file except that the final character need not
+be a <newline>.
+.sp
+.SH STDIN
+.LP
+The standard input shall be used only if no \fIfile\fP operands are
+specified. See the INPUT FILES section.
+.SH INPUT FILES
+.LP
+The input files shall be text files. The \fIscript_file\fPs named
+by the \fB-f\fP option shall consist of editing
+commands.
+.SH ENVIRONMENT VARIABLES
+.LP
+The following environment variables shall affect the execution of
+\fIsed\fP:
+.TP 7
+\fILANG\fP
+Provide a default value for the internationalization variables that
+are unset or null. (See the Base Definitions volume of
+IEEE\ Std\ 1003.1-2001, Section 8.2, Internationalization Variables
+for
+the precedence of internationalization variables used to determine
+the values of locale categories.)
+.TP 7
+\fILC_ALL\fP
+If set to a non-empty string value, override the values of all the
+other internationalization variables.
+.TP 7
+\fILC_COLLATE\fP
+.sp
+Determine the locale for the behavior of ranges, equivalence classes,
+and multi-character collating elements within regular
+expressions.
+.TP 7
+\fILC_CTYPE\fP
+Determine the locale for the interpretation of sequences of bytes
+of text data as characters (for example, single-byte as
+opposed to multi-byte characters in arguments and input files), and
+the behavior of character classes within regular
+expressions.
+.TP 7
+\fILC_MESSAGES\fP
+Determine the locale that should be used to affect the format and
+contents of diagnostic messages written to standard
+error.
+.TP 7
+\fINLSPATH\fP
+Determine the location of message catalogs for the processing of \fILC_MESSAGES
+\&.\fP
+.sp
+.SH ASYNCHRONOUS EVENTS
+.LP
+Default.
+.SH STDOUT
+.LP
+The input files shall be written to standard output, with the editing
+commands specified in the script applied. If the \fB-n\fP
+option is specified, only those input lines selected by the script
+shall be written to standard output.
+.SH STDERR
+.LP
+The standard error shall be used only for diagnostic messages.
+.SH OUTPUT FILES
+.LP
+The output files shall be text files whose formats are dependent on
+the editing commands given.
+.SH EXTENDED DESCRIPTION
+.LP
+The \fIscript\fP shall consist of editing commands of the following
+form:
+.sp
+.RS
+.nf
+
+\fB[\fP\fIaddress\fP\fB[\fP\fB,\fP\fIaddress\fP\fB]]\fP\fIfunction\fP
+.fi
+.RE
+.LP
+where \fIfunction\fP represents a single-character command verb from
+the list in Editing Commands
+in sed, followed by any applicable arguments.
+.LP
+The command can be preceded by <blank>s and/or semicolons. The function
+can be preceded by <blank>s. These optional
+characters shall have no effect.
+.LP
+In default operation, \fIsed\fP cyclically shall append a line of
+input, less its terminating <newline>, into the pattern
+space. Normally the pattern space will be empty, unless a \fBD\fP
+command terminated the last cycle. The \fIsed\fP utility shall
+then apply in sequence all commands whose addresses select that pattern
+space, and at the end of the script copy the pattern space
+to standard output (except when \fB-n\fP is specified) and delete
+the pattern space. Whenever the pattern space is written to
+standard output or a named file, \fIsed\fP shall immediately follow
+it with a <newline>.
+.LP
+Some of the editing commands use a hold space to save all or part
+of the pattern space for subsequent retrieval. The pattern and
+hold spaces shall each be able to hold at least 8192 bytes.
+.SS Addresses in sed
+.LP
+An address is either a decimal number that counts input lines cumulatively
+across files, a \fB'$'\fP character that addresses
+the last line of input, or a context address (which consists of a
+BRE, as described in Regular
+Expressions in sed, preceded and followed by a delimiter, usually
+a slash).
+.LP
+An editing command with no addresses shall select every pattern space.
+.LP
+An editing command with one address shall select each pattern space
+that matches the address.
+.LP
+An editing command with two addresses shall select 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 shall be selected.) Starting
+at the first line following the selected range, \fIsed\fP shall
+look again for the first address. Thereafter, the process shall be
+repeated. Omitting either or both of the address components in
+the following form produces undefined results:
+.sp
+.RS
+.nf
+
+\fB[\fP\fIaddress\fP\fB[\fP\fB,\fP\fIaddress\fP\fB]]\fP
+.fi
+.RE
+.SS Regular Expressions in sed
+.LP
+The \fIsed\fP utility shall support the BREs described in the Base
+Definitions volume of IEEE\ Std\ 1003.1-2001, Section 9.3, Basic Regular
+Expressions, with the following additions:
+.IP " *" 3
+In a context address, the construction \fB"\\cBREc"\fP, where \fIc\fP
+is any character other than backslash or
+<newline>, shall be identical to \fB"/BRE/"\fP . If the character
+designated by \fIc\fP appears following a backslash,
+then it shall be considered to be that literal character, which shall
+not terminate the BRE. For example, in the context address
+\fB"\\xabc\\xdefx"\fP, the second \fIx\fP stands for itself, so that
+the BRE is \fB"abcxdef"\fP .
+.LP
+.IP " *" 3
+The escape sequence \fB'\\n'\fP shall match a <newline> embedded in
+the pattern space. A literal <newline> shall
+not be used in the BRE of a context address or in the substitute function.
+.LP
+.IP " *" 3
+If an RE is empty (that is, no pattern is specified) \fIsed\fP shall
+behave as if the last RE used in the last command applied
+(either as an address or as part of a substitute command) was specified.
+.LP
+.SS Editing Commands in sed
+.LP
+In the following list of editing commands, the maximum number of permissible
+addresses for each function is indicated by [
+\fI0addr\fP], [ \fI1addr\fP], or [ \fI2addr\fP], representing zero,
+one, or two addresses.
+.LP
+The argument \fItext\fP shall consist of one or more lines. Each embedded
+<newline> in the text shall be preceded by a
+backslash. Other backslashes in text shall be removed, and the following
+character shall be treated literally.
+.LP
+The \fBr\fP and \fBw\fP command verbs, and the \fIw\fP flag to the
+\fBs\fP command, take an optional \fIrfile\fP (or
+\fIwfile\fP) parameter, separated from the command verb letter or
+flag by one or more <blank>s; implementations may allow
+zero separation as an extension.
+.LP
+The argument \fIrfile\fP or the argument \fIwfile\fP shall terminate
+the editing command. Each \fIwfile\fP shall be created
+before processing begins. Implementations shall support at least ten
+\fIwfile\fP arguments in the script; the actual number
+(greater than or equal to 10) that is supported by the implementation
+is unspecified. The use of the \fIwfile\fP parameter shall
+cause that file to be initially created, if it does not exist, or
+shall replace the contents of an existing file.
+.LP
+The \fBb\fP, \fBr\fP, \fBs\fP, \fBt\fP, \fBw\fP, \fBy\fP, and \fB:\fP
+command verbs shall accept additional arguments.
+The following synopses indicate which arguments shall be separated
+from the command verbs by a single <space>.
+.LP
+The \fBa\fP and \fBr\fP commands schedule text for later output. The
+text specified for the \fBa\fP command, and the contents
+of the file specified for the \fBr\fP command, shall be written to
+standard output just before the next attempt to fetch a line of
+input when executing the \fBN\fP or \fBn\fP commands, or when reaching
+the end of the script. If written when reaching the end of
+the script, and the \fB-n\fP option was not specified, the text shall
+be written after copying the pattern space to standard
+output. The contents of the file specified for the \fBr\fP command
+shall be as of the time the output is written, not the time the
+\fBr\fP command is applied. The text shall be output in the order
+in which the \fBa\fP and \fBr\fP commands were applied to the
+input.
+.LP
+Command verbs other than \fB{\fP, \fBa\fP, \fBb\fP, \fBc\fP, \fBi\fP,
+\fBr\fP, \fBt\fP, \fBw\fP, \fB:\fP, and \fB#\fP
+can be followed by a semicolon, optional <blank>s, and another command
+verb. However, when the \fBs\fP command verb is used
+with the \fIw\fP flag, following it with another command in this manner
+produces undefined results.
+.LP
+A function can be preceded by one or more \fB'!'\fP characters, in
+which case the function shall be applied if the addresses
+do not select the pattern space. Zero or more <blank>s shall be accepted
+before the first \fB'!'\fP character. It is
+unspecified whether <blank>s can follow a \fB'!'\fP character, and
+conforming applications shall not follow a \fB'!'\fP
+character with <blank>s.
+.TP 7
+\fB[\fP\fI2addr\fP\fB]\ {\fP\fIfunction\fP
+.TP 7
+\fIfunction\fP
+.TP 7
+\&...
+.TP 7
+\fB}\fP
+Execute a list of \fIsed\fP functions only when the pattern space
+is selected. The list of \fIsed\fP functions shall be
+surrounded by braces and separated by <newline>s, and conform to the
+following rules. The braces can be preceded or followed
+by <blank>s. The functions can be preceded by <blank>s, but shall
+not be followed by <blank>s. The
+<right-brace> shall be preceded by a <newline> and can be preceded
+or followed by <blank>s.
+.TP 7
+\fB[\fP\fI1addr\fP\fB]a\\\fP
+.TP 7
+\fItext\fP
+Write text to standard output as described previously.
+.TP 7
+\fB[\fP\fI2addr\fP\fB]b\ [\fP\fIlabel\fP\fB]\fP
+.sp
+Branch to the \fB:\fP function bearing the \fIlabel\fP. If \fIlabel\fP
+is not specified, branch to the end of the script. The
+implementation shall support \fIlabel\fPs recognized as unique up
+to at least 8 characters; the actual length (greater than or
+equal to 8) that shall be supported by the implementation is unspecified.
+It is unspecified whether exceeding a label length causes
+an error or a silent truncation.
+.TP 7
+\fB[\fP\fI2addr\fP\fB]c\\\fP
+.TP 7
+\fItext\fP
+Delete the pattern space. With a 0 or 1 address or at the end of a
+2-address range, place \fItext\fP on the output and start
+the next cycle.
+.TP 7
+\fB[\fP\fI2addr\fP\fB]d\fP
+Delete the pattern space and start the next cycle.
+.TP 7
+\fB[\fP\fI2addr\fP\fB]D\fP
+Delete the initial segment of the pattern space through the first
+<newline> and start the next cycle.
+.TP 7
+\fB[\fP\fI2addr\fP\fB]g\fP
+Replace the contents of the pattern space by the contents of the hold
+space.
+.TP 7
+\fB[\fP\fI2addr\fP\fB]G\fP
+Append to the pattern space a <newline> followed by the contents of
+the hold space.
+.TP 7
+\fB[\fP\fI2addr\fP\fB]h\fP
+Replace the contents of the hold space with the contents of the pattern
+space.
+.TP 7
+\fB[\fP\fI2addr\fP\fB]H\fP
+Append to the hold space a <newline> followed by the contents of the
+pattern space.
+.TP 7
+\fB[\fP\fI1addr\fP\fB]i\\\fP
+.TP 7
+\fItext\fP
+Write \fItext\fP to standard output.
+.TP 7
+\fB[\fP\fI2addr\fP\fB]l\fP
+(The letter ell.) Write the pattern space to standard output in a
+visually unambiguous form. The characters listed in the Base
+Definitions volume of IEEE\ Std\ 1003.1-2001, Table 5-1, Escape Sequences
+and Associated Actions ( \fB'\\\\'\fP,
+\fB'\\a'\fP, \fB'\\b'\fP, \fB'\\f'\fP, \fB'\\r'\fP, \fB'\\t'\fP,
+\fB'\\v'\fP ) shall be written as the
+corresponding escape sequence; the \fB'\\n'\fP in that table is not
+applicable. Non-printable characters not in that table shall
+be written as one three-digit octal number (with a preceding backslash)
+for each byte in the character (most significant byte
+first). If the size of a byte on the system is greater than 9 bits,
+the format used for non-printable characters is
+implementation-defined.
+.LP
+Long lines shall be folded, with the point of folding indicated by
+writing a backslash followed by a <newline>; the length
+at which folding occurs is unspecified, but should be appropriate
+for the output device. The end of each line shall be marked with
+a \fB'$'\fP .
+.TP 7
+\fB[\fP\fI2addr\fP\fB]n\fP
+Write the pattern space to standard output if the default output has
+not been suppressed, and replace the pattern space with
+the next line of input, less its terminating <newline>.
+.LP
+If no next line of input is available, the \fBn\fP command verb shall
+branch to the end of the script and quit without starting
+a new cycle.
+.TP 7
+\fB[\fP\fI2addr\fP\fB]N\fP
+Append the next line of input, less its terminating <newline>, to
+the pattern space, using an embedded <newline> to
+separate the appended material from the original material. Note that
+the current line number changes.
+.LP
+If no next line of input is available, the \fBN\fP command verb shall
+branch to the end of the script and quit without starting
+a new cycle or copying the pattern space to standard output.
+.TP 7
+\fB[\fP\fI2addr\fP\fB]p\fP
+Write the pattern space to standard output.
+.TP 7
+\fB[\fP\fI2addr\fP\fB]P\fP
+Write the pattern space, up to the first <newline>, to standard output.
+.TP 7
+\fB[\fP\fI1addr\fP\fB]q\fP
+Branch to the end of the script and quit without starting a new cycle.
+.TP 7
+\fB[\fP\fI1addr\fP\fB]r\ \fP \fIrfile\fP
+Copy the contents of \fIrfile\fP to standard output as described previously.
+If \fIrfile\fP does not exist or cannot be read,
+it shall be treated as if it were an empty file, causing no error
+condition.
+.TP 7
+\fB[\fP\fI2addr\fP\fB]s/\fP\fIBRE\fP\fB/\fP\fIreplacement\fP\fB/\fP\fIflags\fP
+.sp
+Substitute the replacement string for instances of the BRE in the
+pattern space. Any character other than backslash or
+<newline> can be used instead of a slash to delimit the BRE and the
+replacement. Within the BRE and the replacement, the BRE
+delimiter itself can be used as a literal character if it is preceded
+by a backslash.
+.LP
+The replacement string shall be scanned from beginning to end. An
+ampersand ( \fB'&'\fP ) appearing in the replacement
+shall be replaced by the string matching the BRE. The special meaning
+of \fB'&'\fP in this context can be suppressed by
+preceding it by a backslash. The characters \fB"\\\fP\fIn"\fP, where
+\fIn\fP is a digit, shall be replaced by the text matched
+by the corresponding backreference expression. The special meaning
+of \fB"\\\fP\fIn"\fP where \fIn\fP is a digit in this
+context, can be suppressed by preceding it by a backslash. For each
+other backslash ( \fB'\\'\fP ) encountered, the following
+character shall lose its special meaning (if any). The meaning of
+a \fB'\\'\fP immediately followed by any character other than
+\fB'&'\fP, \fB'\\'\fP, a digit, or the delimiter character used
+for this command, is unspecified.
+.LP
+A line can be split by substituting a <newline> into it. The application
+shall escape the <newline> in the
+replacement by preceding it by a backslash. A substitution shall be
+considered to have been performed even if the replacement
+string is identical to the string that it replaces. Any backslash
+used to alter the default meaning of a subsequent character shall
+be discarded from the BRE or the replacement before evaluating the
+BRE or using the replacement.
+.LP
+The value of \fIflags\fP shall be zero or more of:
+.TP 7
+\fIn\fP
+.RS
+Substitute for the \fIn\fPth occurrence only of the BRE found within
+the pattern space.
+.RE
+.TP 7
+\fBg\fP
+.RS
+Globally substitute for all non-overlapping instances of the BRE rather
+than just the first one. If both \fBg\fP and \fIn\fP
+are specified, the results are unspecified.
+.RE
+.TP 7
+\fBp\fP
+.RS
+Write the pattern space to standard output if a replacement was made.
+.RE
+.TP 7
+\fBw\ \fP \fIwfile\fP
+.RS
+Write. Append the pattern space to \fIwfile\fP if a replacement was
+made. A conforming application shall precede the
+\fIwfile\fP argument with one or more <blank>s. If the \fBw\fP flag
+is not the last flag value given in a concatenation of
+multiple flag values, the results are undefined.
+.RE
+.sp
+.TP 7
+\fB[\fP\fI2addr\fP\fB]t\ [\fP\fIlabel\fP\fB]\fP
+.sp
+Test. Branch to the \fB:\fP command verb bearing the \fIlabel\fP if
+any substitutions have been made since the most recent
+reading of an input line or execution of a \fBt\fP. If \fIlabel\fP
+is not specified, branch to the end of the script.
+.TP 7
+\fB[\fP\fI2addr\fP\fB]w\ \fP \fIwfile\fP
+.sp
+Append (write) the pattern space to \fIwfile\fP.
+.TP 7
+\fB[\fP\fI2addr\fP\fB]x\fP
+Exchange the contents of the pattern and hold spaces.
+.TP 7
+\fB[\fP\fI2addr\fP\fB]y/\fP\fIstring1\fP\fB/\fP\fIstring2\fP\fB/\fP
+.sp
+Replace all occurrences of characters in \fIstring1\fP with the corresponding
+characters in \fIstring2\fP. If a backslash
+followed by an \fB'n'\fP appear in \fIstring1\fP or \fIstring2\fP,
+the two characters shall be handled as a single
+<newline>. If the number of characters in \fIstring1\fP and \fIstring2\fP
+are not equal, or if any of the characters in
+\fIstring1\fP appear more than once, the results are undefined. Any
+character other than backslash or <newline> can be used
+instead of slash to delimit the strings. If the delimiter is not \fIn\fP,
+within \fIstring1\fP and \fIstring2\fP, the delimiter
+itself can be used as a literal character if it is preceded by a backslash.
+If a backslash character is immediately followed by a
+backslash character in \fIstring1\fP or \fIstring2\fP, the two backslash
+characters shall be counted as a single literal
+backslash character. The meaning of a backslash followed by any character
+that is not \fB'n'\fP, a backslash, or the delimiter
+character is undefined.
+.TP 7
+\fB[\fP\fI0addr\fP\fB]:\fP\fIlabel\fP
+Do nothing. This command bears a \fIlabel\fP to which the \fBb\fP
+and \fBt\fP commands branch.
+.TP 7
+\fB[\fP\fI1addr\fP\fB]=\fP
+Write the following to standard output:
+.sp
+.RS
+.nf
+
+\fB"%d\\n", <\fP\fIcurrent line number\fP\fB>
+\fP
+.fi
+.RE
+.TP 7
+\fB[\fP\fI0addr\fP\fB]\fP
+Ignore this empty command.
+.TP 7
+\fB[\fP\fI0addr\fP\fB]#\fP
+Ignore the \fB'#'\fP and the remainder of the line (treat them as
+a comment), with the single exception that if the first
+two characters in the script are \fB"#n"\fP, the default output shall
+be suppressed; this shall be the equivalent of specifying
+\fB-n\fP on the command line.
+.sp
+.SH EXIT STATUS
+.LP
+The following exit values shall be returned:
+.TP 7
+\ 0
+Successful completion.
+.TP 7
+>0
+An error occurred.
+.sp
+.SH CONSEQUENCES OF ERRORS
+.LP
+Default.
+.LP
+\fIThe following sections are informative.\fP
+.SH APPLICATION USAGE
+.LP
+Regular expressions match entire strings, not just individual lines,
+but a <newline> is matched by \fB'\\n'\fP in a
+\fIsed\fP RE; a <newline> is not allowed by the general definition
+of regular expression in IEEE\ Std\ 1003.1-2001.
+Also note that \fB'\\n'\fP cannot be used to match a <newline> at
+the end of an arbitrary input line; <newline>s
+appear in the pattern space as a result of the \fBN\fP editing command.
+.SH EXAMPLES
+.LP
+This \fIsed\fP script simulates the BSD \fIcat\fP \fB-s\fP command,
+squeezing excess
+blank lines from standard input.
+.sp
+.RS
+.nf
+
+\fBsed -n '
+# Write non-empty lines.
+/./ {
+ p
+ d
+ }
+# Write a single empty line, then look for more empty lines.
+/^$/ p
+# Get next line, discard the held <newline> (empty line),
+# and look for more empty lines.
+:Empty
+/^$/ {
+ N
+ s/.//
+ b Empty
+ }
+# Write the non-empty line before going back to search
+# for the first in a set of empty lines.
+ p
+'
+\fP
+.fi
+.RE
+.SH RATIONALE
+.LP
+This volume of IEEE\ Std\ 1003.1-2001 requires implementations to
+support at least ten distinct \fIwfile\fPs, matching
+historical practice on many implementations. Implementations are encouraged
+to support more, but conforming applications should not
+exceed this limit.
+.LP
+The exit status codes specified here are different from those in System
+V. System V returns 2 for garbled \fIsed\fP commands,
+but returns zero with its usage message or if the input file could
+not be opened. The standard developers considered this to be a
+bug.
+.LP
+The manner in which the \fBl\fP command writes non-printable characters
+was changed to avoid the historical
+backspace-overstrike method, and other requirements to achieve unambiguous
+output were added. See the RATIONALE for \fIed\fP for details of the
+format chosen, which is the same as that chosen for \fIsed\fP.
+.LP
+This volume of IEEE\ Std\ 1003.1-2001 requires implementations to
+provide pattern and hold spaces of at least 8192
+bytes, larger than the 4000 bytes spaces used by some historical implementations,
+but less than the 20480 bytes limit used in an
+early proposal. Implementations are encouraged to allocate dynamically
+larger pattern and hold spaces as needed.
+.LP
+The requirements for acceptance of <blank>s and <space>s in command
+lines has been made more explicit than in early
+proposals to describe clearly the historical practice and to remove
+confusion about the phrase "protect initial blanks
+[\fIsic\fP] and tabs from the stripping that is done on every script
+line" that appears in much of the historical documentation
+of the \fIsed\fP utility description of text. (Not all implementations
+are known to have stripped <blank>s from text lines,
+although they all have allowed leading <blank>s preceding the address
+on a command line.)
+.LP
+The treatment of \fB'#'\fP comments differs from the SVID which only
+allows a comment as the first line of the script, but
+matches BSD-derived implementations. The comment character is treated
+as a command, and it has the same properties in terms of
+being accepted with leading <blank>s; the BSD implementation has historically
+supported this.
+.LP
+Early proposals required that a \fIscript_file\fP have at least one
+non-comment line. Some historical implementations have
+behaved in unexpected ways if this were not the case. The standard
+developers considered that this was incorrect behavior and that
+application developers should not have to avoid this feature. A correct
+implementation of this volume of
+IEEE\ Std\ 1003.1-2001 shall permit \fIscript_file\fPs that consist
+only of comment lines.
+.LP
+Early proposals indicated that if \fB-e\fP and \fB-f\fP options were
+intermixed, all \fB-e\fP options were processed before
+any \fB-f\fP options. This has been changed to process them in the
+order presented because it matches historical practice and is
+more intuitive.
+.LP
+The treatment of the \fBp\fP flag to the \fBs\fP command differs between
+System V and BSD-based systems when the default
+output is suppressed. In the two examples:
+.sp
+.RS
+.nf
+
+\fBecho a | sed 's/a/A/p'
+echo a | sed -n 's/a/A/p'
+\fP
+.fi
+.RE
+.LP
+this volume of IEEE\ Std\ 1003.1-2001, BSD, System V documentation,
+and the SVID indicate that the first example should
+write two lines with \fBA\fP, whereas the second should write one.
+Some System V systems write the \fBA\fP only once in both
+examples because the \fBp\fP flag is ignored if the \fB-n\fP option
+is not specified.
+.LP
+This is a case of a diametrical difference between systems that could
+not be reconciled through the compromise of declaring the
+behavior to be unspecified. The SVID/BSD/System V documentation behavior
+was adopted for this volume of
+IEEE\ Std\ 1003.1-2001 because:
+.IP " *" 3
+No known documentation for any historic system describes the interaction
+between the \fBp\fP flag and the \fB-n\fP option.
+.LP
+.IP " *" 3
+The selected behavior is more correct as there is no technical justification
+for any interaction between the \fBp\fP flag and
+the \fB-n\fP option. A relationship between \fB-n\fP and the \fBp\fP
+flag might imply that they are only used together, but this
+ignores valid scripts that interrupt the cyclical nature of the processing
+through the use of the \fBD\fP, \fBd\fP, \fBq\fP, or
+branching commands. Such scripts rely on the \fBp\fP suffix to write
+the pattern space because they do not make use of the default
+output at the "bottom" of the script.
+.LP
+.IP " *" 3
+Because the \fB-n\fP option makes the \fBp\fP flag unnecessary, any
+interaction would only be useful if \fIsed\fP scripts
+were written to run both with and without the \fB-n\fP option. This
+is believed to be unlikely. It is even more unlikely that
+programmers have coded the \fBp\fP flag expecting it to be unnecessary.
+Because the interaction was not documented, the likelihood
+of a programmer discovering the interaction and depending on it is
+further decreased.
+.LP
+.IP " *" 3
+Finally, scripts that break under the specified behavior produce too
+much output instead of too little, which is easier to
+diagnose and correct.
+.LP
+.LP
+The form of the substitute command that uses the \fBn\fP suffix was
+limited to the first 512 matches in an early proposal. This
+limit has been removed because there is no reason an editor processing
+lines of {LINE_MAX} length should have this restriction. The
+command \fBs/a/A/2047\fP should be able to substitute the 2047th occurrence
+of \fBa\fP on a line.
+.LP
+The \fBb\fP, \fBt\fP, and \fB:\fP commands are documented to ignore
+leading white space, but no mention is made of trailing
+white space. Historical implementations of \fIsed\fP assigned different
+locations to the labels \fB'x'\fP and
+\fB"x\ "\fP . This is not useful, and leads to subtle programming
+errors, but it is historical practice, and changing it
+could theoretically break working scripts. Implementors are encouraged
+to provide warning messages about labels that are never used
+or jumps to labels that do not exist.
+.LP
+Historically, the \fIsed\fP \fB!\fP and \fB}\fP editing commands did
+not permit multiple commands on a single line using a
+semicolon as a command delimiter. Implementations are permitted, but
+not required, to support this extension.
+.SH FUTURE DIRECTIONS
+.LP
+None.
+.SH SEE ALSO
+.LP
+\fIawk\fP, \fIed\fP, \fIgrep\fP
+.SH COPYRIGHT
+Portions of this text are reprinted and reproduced in electronic form
+from IEEE Std 1003.1, 2003 Edition, Standard for Information Technology
+-- Portable Operating System Interface (POSIX), The Open Group Base
+Specifications Issue 6, Copyright (C) 2001-2003 by the Institute of
+Electrical and Electronics Engineers, Inc and The Open Group. In the
+event of any discrepancy between this version and the original IEEE and
+The Open Group Standard, the original IEEE and The Open Group Standard
+is the referee document. The original Standard can be obtained online at
+http://www.opengroup.org/unix/online.html .