diff options
Diffstat (limited to 'man-pages-posix-2013/man1p/sed.1p')
-rw-r--r-- | man-pages-posix-2013/man1p/sed.1p | 1067 |
1 files changed, 1067 insertions, 0 deletions
diff --git a/man-pages-posix-2013/man1p/sed.1p b/man-pages-posix-2013/man1p/sed.1p new file mode 100644 index 0000000..90428f4 --- /dev/null +++ b/man-pages-posix-2013/man1p/sed.1p @@ -0,0 +1,1067 @@ +'\" et +.TH SED "1P" 2013 "IEEE/The Open Group" "POSIX Programmer's Manual" +.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 +\(em stream editor +.SH SYNOPSIS +.LP +.nf +sed \fB[\fR\(min\fB] \fIscript \fB[\fIfile\fR...\fB]\fR +.P +sed \fB[\fR\(min\fB] \fR\(mie \fIscript \fB[\fR\(mie \fIscript\fB]\fR... \fB[\fR\(mif \fIscript_file\fB]\fR... \fB[\fIfile\fR...\fB]\fR +.P +sed \fB[\fR\(min\fB] [\fR\(mie \fIscript\fB]\fR... \(mif \fIscript_file\fR \fB[\fR\(mif \fIscript_file\fB]\fR... \fB[\fIfile\fR...\fB]\fR +.fi +.SH DESCRIPTION +The +.IR sed +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 +.IR script +operand string or a combination of the option-arguments from the +.BR \(mie +.IR script +and +.BR \(mif +.IR script_file +options. +.SH OPTIONS +The +.IR sed +utility shall conform to the Base Definitions volume of POSIX.1\(hy2008, +.IR "Section 12.2" ", " "Utility Syntax Guidelines", +except that the order of presentation of the +.BR \(mie +and +.BR \(mif +options is significant. +.P +The following options shall be supported: +.IP "\fB\(mie\ \fIscript\fR" 10 +Add the editing commands specified by the +.IR script +option-argument to the end of the script of editing commands. +.IP "\fB\(mif\ \fIscript_file\fR" 10 +Add the editing commands in the file +.IR script_file +to the end of the script of editing commands. +.IP "\fB\(min\fP" 10 +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. +.P +If any +.BR \(mie +or +.BR \(mif +options are specified, the script of editing commands shall initially +be empty. The commands specified by each +.BR \(mie +or +.BR \(mif +option shall be added to the script in the order specified. When each +addition is made, if the previous addition (if any) was from a +.BR \(mie +option, a +<newline> +shall be inserted before the new addition. The resulting script shall +have the same properties as the +.IR script +operand, described in the OPERANDS section. +.SH OPERANDS +The following operands shall be supported: +.IP "\fIfile\fR" 10 +A pathname of a file whose contents are read and edited. If multiple +.IR file +operands are specified, the named files shall be read in the order +specified and the concatenation shall be edited. If no +.IR file +operands are specified, the standard input shall be used. +.IP "\fIscript\fR" 10 +A string to be used as the script of editing commands. The application +shall not present a +.IR script +that violates the restrictions of a text file except that the final +character need not be a +<newline>. +.SH STDIN +The standard input shall be used if no +.IR file +operands are specified, and shall be used if a +.IR file +operand is +.BR '\(mi' +and the implementation treats the +.BR '\(mi' +as meaning standard input. +Otherwise, the standard input shall not be used. +See the INPUT FILES section. +.SH "INPUT FILES" +The input files shall be text files. The +.IR script_file s +named by the +.BR \(mif +option shall consist of editing commands. +.SH "ENVIRONMENT VARIABLES" +The following environment variables shall affect the execution of +.IR sed : +.IP "\fILANG\fP" 10 +Provide a default value for the internationalization variables that are +unset or null. (See the Base Definitions volume of POSIX.1\(hy2008, +.IR "Section 8.2" ", " "Internationalization Variables" +for the precedence of internationalization variables used to determine +the values of locale categories.) +.IP "\fILC_ALL\fP" 10 +If set to a non-empty string value, override the values of all the +other internationalization variables. +.IP "\fILC_COLLATE\fP" 10 +.br +Determine the locale for the behavior of ranges, equivalence classes, +and multi-character collating elements within regular expressions. +.IP "\fILC_CTYPE\fP" 10 +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. +.IP "\fILC_MESSAGES\fP" 10 +.br +Determine the locale that should be used to affect the format and +contents of diagnostic messages written to standard error. +.IP "\fINLSPATH\fP" 10 +Determine the location of message catalogs for the processing of +.IR LC_MESSAGES . +.SH "ASYNCHRONOUS EVENTS" +Default. +.SH STDOUT +The input files shall be written to standard output, with the editing +commands specified in the script applied. If the +.BR \(min +option is specified, only those input lines selected by the script +shall be written to standard output. +.SH STDERR +The standard error shall be used only for diagnostic messages. +.SH "OUTPUT FILES" +The output files shall be text files whose formats are dependent on the +editing commands given. +.SH "EXTENDED DESCRIPTION" +The +.IR script +shall consist of editing commands of the following form: +.sp +.RS 4 +.nf +\fB +\fB[\fIaddress\fB[\fR,\fIaddress\fB]]\fIfunction\fR +.fi \fR +.P +.RE +.P +where +.IR function +represents a single-character command verb from the list in +.IR "Editing Commands in sed", +followed by any applicable arguments. +.P +The command can be preceded by +<blank> +characters and/or +<semicolon> +characters. The function can be preceded by +<blank> +characters. These optional characters shall have no effect. +.P +In default operation, +.IR sed +cyclically shall append a line of input, less its terminating +<newline> +character, into the pattern space. Reading from input shall be skipped +if a +<newline> +was in the pattern space prior to a +.BR D +command ending the previous cycle. The +.IR sed +utility shall then apply in sequence all commands whose addresses select +that pattern space, until a command starts the next cycle or quits. If +no commands explicitly started a new cycle, then at the end of the script +the pattern space shall be copied to standard output (except when +.BR \(min +is specified) and the pattern space shall be deleted. Whenever the +pattern space is written to standard output or a named file, +.IR sed +shall immediately follow it with a +<newline>. +.P +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 8\|192 bytes. +.SS "Addresses in sed" +.P +An address is either a decimal number that counts input lines +cumulatively across files, a +.BR '$' +character that addresses the last line of input, or a context address +(which consists of a BRE, as described in +.IR "Regular Expressions in sed", +preceded and followed by a delimiter, usually a +<slash>). +.P +An editing command with no addresses shall select every pattern space. +.P +An editing command with one address shall select each pattern space +that matches the address. +.P +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, +.IR sed +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 4 +.nf +\fB +\fB[\fIaddress\fB[\fR,\fIaddress\fB]]\fR +.fi \fR +.P +.RE +.SS "Regular Expressions in sed" +.P +The +.IR sed +utility shall support the BREs described in the Base Definitions volume of POSIX.1\(hy2008, +.IR "Section 9.3" ", " "Basic Regular Expressions", +with the following additions: +.IP " *" 4 +In a context address, the construction +.BR \(dq\ecBREc\(dq , +where +.IR c +is any character other than +<backslash> +or +<newline>, +shall be identical to +.BR \(dq/BRE/\(dq . +If the character designated by +.IR c +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 +.BR \(dq\exabc\exdefx\(dq , +the second +.IR x +stands for itself, so that the BRE is +.BR \(dqabcxdef\(dq . +.IP " *" 4 +The escape sequence +.BR '\en' +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. +.IP " *" 4 +If an RE is empty (that is, no pattern is specified) +.IR sed +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. +.SS "Editing Commands in sed" +.P +In the following list of editing commands, the maximum number of +permissible addresses for each function is indicated by [\c +.IR 0addr ], +[\c +.IR 1addr ], +or [\c +.IR 2addr ], +representing zero, one, or two addresses. +.P +The argument +.IR text +shall consist of one or more lines. Each embedded +<newline> +in the text shall be preceded by a +<backslash>. +Other +<backslash> +characters in text shall be removed, and the following character shall +be treated literally. +.P +The +.BR r +and +.BR w +command verbs, and the +.IR w +flag to the +.BR s +command, take an +.IR rfile +(or +.IR wfile ) +parameter, separated from the command verb letter or flag by one or +more +<blank> +characters; implementations may allow zero separation as an extension. +.P +The argument +.IR rfile +or the argument +.IR wfile +shall terminate the editing command. Each +.IR wfile +shall be created before processing begins. Implementations shall +support at least ten +.IR wfile +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 +.IR wfile +parameter shall cause that file to be initially created, if it does not +exist, or shall replace the contents of an existing file. +.P +The +.BR b , +.BR r , +.BR s , +.BR t , +.BR w , +.BR y , +and +.BR : +command verbs shall accept additional arguments. The following synopses +indicate which arguments shall be separated from the command verbs by a +single +<space>. +.P +The +.BR a +and +.BR r +commands schedule text for later output. The text specified for the +.BR a +command, and the contents of the file specified for the +.BR r +command, shall be written to standard output just before the next +attempt to fetch a line of input when executing the +.BR N +or +.BR n +commands, or when reaching the end of the script. If written when +reaching the end of the script, and the +.BR \(min +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 +.BR r +command shall be as of the time the output is written, not the time the +.BR r +command is applied. The text shall be output in the order in which the +.BR a +and +.BR r +commands were applied to the input. +.P +Command verbs other than +.BR { , +.BR a , +.BR b , +.BR c , +.BR i , +.BR r , +.BR t , +.BR w , +.BR : , +and +.BR # +can be followed by a +<semicolon>, +optional +<blank> +characters, and another command verb. However, when the +.BR s +command verb is used with the +.IR w +flag, following it with another command in this manner produces +undefined results. +.P +A function can be preceded by one or more +.BR '!' +characters, in which case the function shall be applied if the +addresses do not select the pattern space. Zero or more +<blank> +characters shall be accepted before the first +.BR '!' +character. It is unspecified whether +<blank> +characters can follow a +.BR '!' +character, and conforming applications shall not follow a +.BR '!' +character with +<blank> +characters. +.IP "\fB[\fI2addr\fB]\ {\fIediting command\fR" 10 +.IP "\fIediting command\fR" 10 +.IP ".\|.\|." 10 +.IP "\fB}\fR" 10 +Execute a list of +.IR sed +editing commands only when the pattern space is selected. The list of +.IR sed +editing commands shall be surrounded by braces and separated by +<newline> +characters, and conform to the following rules. The braces can be preceded +or followed by +<blank> +characters. The editing commands can be preceded by +<blank> +characters, but shall not be followed by +<blank> +characters. The +<right-brace> +shall be preceded by a +<newline> +and can be preceded or followed by +<blank> +characters. +.IP "\fB[\fI1addr\fB]a\e\fR" 10 +.IP "\fItext\fR" 10 +Write text to standard output as described previously. +.IP "\fB[\fI2addr\fB]b\ [\fIlabel\fB]\fR" 10 +.br +Branch to the +.BR : +function bearing the +.IR label . +If +.IR label +is not specified, branch to the end of the script. The implementation +shall support +.IR label s +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. +.IP "\fB[\fI2addr\fB]c\e\fR" 10 +.IP "\fItext\fR" 10 +Delete the pattern space. With a 0 or 1 address or at the end of a +2-address range, place +.IR text +on the output and start the next cycle. +.IP "\fB[\fI2addr\fB]d\fR" 10 +Delete the pattern space and start the next cycle. +.IP "\fB[\fI2addr\fB]D\fR" 10 +If the pattern space contains no +<newline>, +delete the pattern space and start a normal new cycle as if the +.BR d +command was issued. Otherwise, delete the initial segment of the +pattern space through the first +<newline>, +and start the next cycle with the resultant pattern space and without +reading any new input. +.IP "\fB[\fI2addr\fB]g\fR" 10 +Replace the contents of the pattern space by the contents of the hold +space. +.IP "\fB[\fI2addr\fB]G\fR" 10 +Append to the pattern space a +<newline> +followed by the contents of the hold space. +.IP "\fB[\fI2addr\fB]h\fR" 10 +Replace the contents of the hold space with the contents of the pattern +space. +.IP "\fB[\fI2addr\fB]H\fR" 10 +Append to the hold space a +<newline> +followed by the contents of the pattern space. +.IP "\fB[\fI1addr\fB]i\e\fR" 10 +.IP "\fItext\fR" 10 +Write +.IR text +to standard output. +.IP "\fB[\fI2addr\fB]l\fR" 10 +(The letter ell.) Write the pattern space to standard output in a +visually unambiguous form. The characters listed in the Base Definitions volume of POSIX.1\(hy2008, +.IR "Table 5-1" ", " "Escape Sequences and Associated Actions" +(\c +.BR '\e\e' , +.BR '\ea' , +.BR '\eb' , +.BR '\ef' , +.BR '\er' , +.BR '\et' , +.BR '\ev' ) +shall be written as the corresponding escape sequence; the +.BR '\en' +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). +.RS 10 +.P +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 +.BR '$' . +.RE +.IP "\fB[\fI2addr\fB]n\fR" 10 +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>. +.RS 10 +.P +If no next line of input is available, the +.BR n +command verb shall branch to the end of the script and quit without +starting a new cycle. +.RE +.IP "\fB[\fI2addr\fB]N\fR" 10 +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. +.RS 10 +.P +If no next line of input is available, the +.BR N +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. +.RE +.IP "\fB[\fI2addr\fB]p\fR" 10 +Write the pattern space to standard output. +.IP "\fB[\fI2addr\fB]P\fR" 10 +Write the pattern space, up to the first +<newline>, +to standard output. +.IP "\fB[\fI1addr\fB]q\fR" 10 +Branch to the end of the script and quit without starting a new cycle. +.IP "\fB[\fI1addr\fB]r\ \fIrfile\fR" 10 +Copy the contents of +.IR rfile +to standard output as described previously. If +.IR rfile +does not exist or cannot be read, it shall be treated as if it were an +empty file, causing no error condition. +.IP "\fB[\fI2addr\fB]s/\fIBRE\fB/\fIreplacement\fB/\fIflags\fR" 10 +.br +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>. +.RS 10 +.P +The replacement string shall be scanned from beginning to end. An +<ampersand> +(\c +.BR '&' ) +appearing in the replacement shall be replaced by the string matching +the BRE. The special meaning of +.BR '&' +in this context can be suppressed by preceding it by a +<backslash>. +The characters \fR"\e\fIn"\fR, where +.IR n +is a digit, shall be replaced by the text matched by the corresponding +back-reference expression. If the corresponding back-reference expression +does not match, then the characters \fR"\e\fIn"\fR shall be replaced +by the empty string. The special meaning of \fR"\e\fIn"\fR where +.IR n +is a digit in this context, can be suppressed by preceding it by a +<backslash>. +For each other +<backslash> +encountered, the following character shall lose its special meaning (if +any). The meaning of a +<backslash> +immediately followed by any character other than +.BR '&' , +<backslash>, +a digit, or the delimiter character used for this command, is +unspecified. +.P +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. +.P +The value of +.IR flags +shall be zero or more of: +.IP "\fIn\fR" 10 +Substitute for the +.IR n th +occurrence only of the BRE found within the pattern space. +.IP "\fBg\fR" 10 +Globally substitute for all non-overlapping instances of the BRE rather +than just the first one. If both +.BR g +and +.IR n +are specified, the results are unspecified. +.IP "\fBp\fR" 10 +Write the pattern space to standard output if a replacement was made. +.IP "\fBw\ \fIwfile\fR" 10 +Write. Append the pattern space to +.IR wfile +if a replacement was made. A conforming application shall precede the +.IR wfile +argument with one or more +<blank> +characters. If the +.BR w +flag is not the last flag value given in a concatenation of multiple +flag values, the results are undefined. +.RE +.IP "\fB[\fI2addr\fB]t\ [\fIlabel\fB]\fR" 10 +.br +Test. Branch to the +.BR : +command verb bearing the +.IR label +if any substitutions have been made since the most recent reading of an +input line or execution of a +.BR t . +If +.IR label +is not specified, branch to the end of the script. +.IP "\fB[\fI2addr\fB]w\ \fIwfile\fR" 10 +.br +Append (write) the pattern space to +.IR wfile . +.IP "\fB[\fI2addr\fB]x\fR" 10 +Exchange the contents of the pattern and hold spaces. +.IP "\fB[\fI2addr\fB]y/\fIstring1\fB/\fIstring2\fB/\fR" 10 +.br +Replace all occurrences of characters in +.IR string1 +with the corresponding characters in +.IR string2 . +If a +<backslash> +followed by an +.BR 'n' +appear in +.IR string1 +or +.IR string2 , +the two characters shall be handled as a single +<newline>. +If the number of characters in +.IR string1 +and +.IR string2 +are not equal, or if any of the characters in +.IR string1 +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 +.BR 'n' , +within +.IR string1 +and +.IR string2 , +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 +.IR string1 +or +.IR string2 , +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 +.BR 'n' , +a +<backslash>, +or the delimiter character is undefined. +.IP "\fB[\fI0addr\fB]:\fIlabel\fR" 10 +Do nothing. This command bears a +.IR label +to which the +.BR b +and +.BR t +commands branch. +.IP "\fB[\fI1addr\fB]=\fR" 10 +Write the following to standard output: +.RS 10 +.sp +.RS 4 +.nf +\fB +"%d\en", <\fIcurrent line number\fR> +.fi \fR +.P +.RE +.RE +.IP "\fB[\fI0addr\fB]\fR" 10 +Ignore this empty command. +.IP "\fB[\fI0addr\fB]#\fR" 10 +Ignore the +.BR '#' +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 +.BR \(dq#n\(dq , +the default output shall be suppressed; this shall be the equivalent of +specifying +.BR \(min +on the command line. +.SH "EXIT STATUS" +The following exit values shall be returned: +.IP "\00" 6 +Successful completion. +.IP >0 6 +An error occurred. +.SH "CONSEQUENCES OF ERRORS" +Default. +.LP +.IR "The following sections are informative." +.SH "APPLICATION USAGE" +Regular expressions match entire strings, not just individual lines, +but a +<newline> +is matched by +.BR '\en' +in a +.IR sed +RE; a +<newline> +is not allowed by the general definition of regular expression in +POSIX.1\(hy2008. Also note that +.BR '\en' +cannot be used to match a +<newline> +at the end of an arbitrary input line; +<newline> +characters appear in the pattern space as a result of the +.BR N +editing command. +.SH EXAMPLES +This +.IR sed +script simulates the BSD +.IR cat +.BR \(mis +command, squeezing excess empty lines from standard input. +.sp +.RS 4 +.nf +\fB +sed \(min ' +# 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 +\&' +.fi \fR +.P +.RE +.P +The following +.IR sed +command is a much simpler method of squeezing empty lines, although +it is not quite the same as +.IR cat +.BR \(mis +since it removes any initial empty lines: +.sp +.RS 4 +.nf +\fB +sed \(min '/./,/^$/p' +.fi \fR +.P +.RE +.SH RATIONALE +This volume of POSIX.1\(hy2008 requires implementations to support at least ten distinct +.IR wfile s, +matching historical practice on many implementations. Implementations +are encouraged to support more, but conforming applications should not +exceed this limit. +.P +The exit status codes specified here are different from those in System +V. System V returns 2 for garbled +.IR sed +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. +.P +The manner in which the +.BR l +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 +.IR "\fIed\fR\^" +for details of the format chosen, which is the same as that chosen for +.IR sed . +.P +This volume of POSIX.1\(hy2008 requires implementations to provide pattern and hold spaces of at +least 8\|192 bytes, larger than the 4\|000 bytes spaces used by some +historical implementations, but less than the 20\|480 bytes limit used +in an early proposal. Implementations are encouraged to allocate +dynamically larger pattern and hold spaces as needed. +.P +The requirements for acceptance of +<blank> +and +<space> +characters 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 +.IR sed +utility description of text. (Not all implementations are known to have +stripped +<blank> +characters from text lines, although they all have allowed leading +<blank> +characters preceding the address on a command line.) +.P +The treatment of +.BR '#' +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> +characters; the BSD implementation has historically supported this. +.P +Early proposals required that a +.IR script_file +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 POSIX.1\(hy2008 shall permit +.IR script_file s +that consist only of comment lines. +.P +Early proposals indicated that if +.BR \(mie +and +.BR \(mif +options were intermixed, all +.BR \(mie +options were processed before any +.BR \(mif +options. This has been changed to process them in the order presented +because it matches historical practice and is more intuitive. +.P +The treatment of the +.BR p +flag to the +.BR s +command differs between System V and BSD-based systems when the default +output is suppressed. In the two examples: +.sp +.RS 4 +.nf +\fB +echo a | sed 's/a/A/p' +echo a | sed \(min 's/a/A/p' +.fi \fR +.P +.RE +.P +this volume of POSIX.1\(hy2008, BSD, System V documentation, and the SVID indicate that the +first example should write two lines with +.BR A , +whereas the second should write one. Some System V systems write the +.BR A +only once in both examples because the +.BR p +flag is ignored if the +.BR \(min +option is not specified. +.P +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 POSIX.1\(hy2008 because: +.IP " *" 4 +No known documentation for any historic system describes the +interaction between the +.BR p +flag and the +.BR \(min +option. +.IP " *" 4 +The selected behavior is more correct as there is no technical +justification for any interaction between the +.BR p +flag and the +.BR \(min +option. A relationship between +.BR \(min +and the +.BR p +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 +.BR D , +.BR d , +.BR q , +or branching commands. Such scripts rely on the +.BR p +suffix to write the pattern space because they do not make use of the +default output at the ``bottom'' of the script. +.IP " *" 4 +Because the +.BR \(min +option makes the +.BR p +flag unnecessary, any interaction would only be useful if +.IR sed +scripts were written to run both with and without the +.BR \(min +option. This is believed to be unlikely. It is even more unlikely that +programmers have coded the +.BR p +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. +.IP " *" 4 +Finally, scripts that break under the specified behavior produce too +much output instead of too little, which is easier to diagnose and +correct. +.P +The form of the substitute command that uses the +.BR n +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 +.BR "s/a/A/2047" +should be able to substitute the 2\|047th occurrence of +.BR a +on a line. +.P +The +.BR b , +.BR t , +and +.BR : +commands are documented to ignore leading white space, but no mention +is made of trailing white space. Historical implementations of +.IR sed +assigned different locations to the labels +.BR 'x' +and +.BR \(dqx\ \(dq . +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. +.P +Historically, the +.IR sed +.BR ! +and +.BR } +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. +.P +Earlier versions of this standard allowed for implementations with +bytes other than eight bits, but this has been modified in this +version. +.SH "FUTURE DIRECTIONS" +None. +.SH "SEE ALSO" +.IR "\fIawk\fR\^", +.IR "\fIed\fR\^", +.IR "\fIgrep\fR\^" +.P +The Base Definitions volume of POSIX.1\(hy2008, +.IR "Table 5-1" ", " "Escape Sequences and Associated Actions", +.IR "Chapter 8" ", " "Environment Variables", +.IR "Section 9.3" ", " "Basic Regular Expressions", +.IR "Section 12.2" ", " "Utility Syntax Guidelines" +.SH COPYRIGHT +Portions of this text are reprinted and reproduced in electronic form +from IEEE Std 1003.1, 2013 Edition, Standard for Information Technology +-- Portable Operating System Interface (POSIX), The Open Group Base +Specifications Issue 7, Copyright (C) 2013 by the Institute of +Electrical and Electronics Engineers, Inc and The Open Group. +(This is POSIX.1-2008 with the 2013 Technical Corrigendum 1 applied.) 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.unix.org/online.html . + +Any typographical or formatting errors that appear +in this page are most likely +to have been introduced during the conversion of the source files to +man page format. To report such errors, see +https://www.kernel.org/doc/man-pages/reporting_bugs.html . |