'\" te .\" Copyright 1989 AT&T .\" Copyright (c) 1998, Sun Microsystems, Inc. All Rights Reserved .\" Portions Copyright (c) 1992, X/Open Company Limited All Rights Reserved .\" Sun Microsystems, Inc. gratefully acknowledges The Open Group for permission to reproduce portions of its copyrighted documentation.Original documentation from The Open Group can be obtained online at http://www.opengroup.org/bookstore/. .\" The Institute of Electrical and Electronics Engineers and The Open Group, have given us permission to reprint portions of their documentation.In the following statement, the phrase "this text" refers to portions of the system documentation.Portions of this text are reprinted and reproduced in electronic form in the Sun OS Reference Manual, from IEEE Std 1003.1, 2004 Edition, Standard for Information Technology -- Portable Operating System Interface (POSIX), The Open Group Base Specifications Issue 6, Copyright (C) 2001-2004 by the Institute of Electrical and Electronics Engineers, Inc and The Open Group.In the event of any discrepancy between these versions 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.This notice shall appear on any product containing this material. .TH sed 1 "1998 年 7 月 23 日" "SunOS 5.11" "用户命令" .SH 名称 sed \- 流编辑器 .SH 用法概要 .LP .nf \fB/usr/bin/sed\fR [\fB-n\fR] \fIscript\fR [\fIfile\fR]... .fi .LP .nf \fB/usr/bin/sed\fR [\fB-n\fR] [\fB-e\fR \fIscript\fR]... [\fB-f\fR \fIscript_file\fR]... [\fIfile\fR]... .fi .LP .nf \fB/usr/xpg4/bin/sed\fR [\fB-n\fR] \fIscript\fR [\fIfile\fR]... .fi .LP .nf \fB/usr/xpg4/bin/sed\fR [\fB-n\fR] [\fB-e\fR \fIscript\fR]... [\fB-f\fR \fIscript_file\fR]... [\fIfile\fR]... .fi .SH 描述 .sp .LP \fBsed\fR 实用程序是一个流编辑器,用于读取一个或多个文本文件,根据编辑命令脚本进行编辑更改,并将结果写入至标准输出。脚本可以从 \fIscript\fR 操作数字符串获得,也可以从 \fB-e\fR \fIscript\fR 和 \fB-f\fR \fIscript_file\fR 选项构成的选项参数组合获得。 .sp .LP \fBsed\fR 实用程序是一个文本编辑器。它无法编辑二进制文件或者包含 ASCII NUL (\0) 字符或很长行的文件。 .SH 选项 .sp .LP 支持以下选项: .sp .ne 2 .mk .na \fB\fB-e\fR \fIscript\fR \fR .ad .RS 19n .rt \fIscript\fR 是 \fBsed\fR 的一个编辑命令。有关 \fIscript\fR 格式的更多信息,请参见下文的“用法”部分。如果只有一个 \fB-e\fR 选项而没有 \fB-f\fR 选项,可以省略标志 \fB-e\fR。 .RE .sp .ne 2 .mk .na \fB\fB-f\fR \fIscript_file\fR \fR .ad .RS 19n .rt 从 \fIscript_file\fR 获取脚本。\fIscript_file\fR 由编辑命令构成,每行一个命令。 .RE .sp .ne 2 .mk .na \fB\fB-n\fR \fR .ad .RS 19n .rt 禁止缺省输出。 .RE .sp .LP 可以指定多个 \fB-e\fR 和 \fB-f\fR 选项。所有命令将按指定顺序添加到脚本,无论其源自何处。 .SH 操作数 .sp .LP 支持下列操作数: .sp .ne 2 .mk .na \fB\fIfile\fR \fR .ad .RS 11n .rt 要读取和编辑其内容的文件的路径名称。如果指定多个 \fIfile\fR 操作数,将按指定顺序读取指定文件,并将编辑串联。如果未指定 \fIfile\fR 操作数,将使用标准输入。 .RE .sp .ne 2 .mk .na \fB\fIscript\fR \fR .ad .RS 11n .rt 要作为编辑命令脚本使用的字符串。应用程序提供的\fI脚本\fR不得违反文本文件的限制,但最后一个字符不需要是\fB换行\fR符。 .RE .SH 用法 .sp .LP 脚本由编辑命令构成,每行一个命令,其形式如下: .sp .LP [ \fIaddress\fR [ , \fIaddress\fR ] ] \fIcommand\fR [ \fIarguments\fR ] .sp .LP 第一个 address 之前以及 \fIcommand\fR 之前允许有零个或多个空白字符。第一个 address 之前允许有任意数量的分号。 .sp .LP 在常规运行时,\fBsed\fR 会循环将一行输入(去掉结尾的\fB换行\fR符)复制到一个\fI模式空间\fR(除非 \fBD\fR 命令后面跟有某些内容),依次应用其 \fIaddress\fR 选择了该模式空间的所有命令,然后将所得到的模式空间复制到标准输出(除非使用了 \fB-n\fR)并删除该模式空间。每次将模式空间写入标准输出或指定文件时,\fBsed\fR 会立即在其后面加上一个\fI换行\fR符。 .sp .LP 某些命令将使用一个\fI保留空间\fR来保存全部或部分\fI模式空间\fR,以供后续检索使用。每个\fI模式空间\fR和\fI保留空间\fR都能够至少容纳 \fB8192\fR 个字节。 .SS "sed 地址" .sp .LP \fIaddress\fR 可以为空,可以是一个跨多个文件累加计算输入行计数的十进制数,一个 \fB$\fR(用于确定最后一行输入的位置),也可以是一个上下文地址(包含如 \fBregexp\fR(5) 手册页中所述的 \fB/\fR\fIregular expression\fR\fB/\fR)。 .sp .LP 没有地址的命令行会选择每个模式空间。 .sp .LP 有一个地址的命令行会选择每个与该地址匹配的模式空间。 .sp .LP 有两个地址的命令行将从与第一个地址匹配的第一个模式空间到与第二个地址匹配的下一个模式空间的范围内进行选择(包含二者)。此后,将重复执行该过程,再次查找第一个地址。(如果表示第二个地址的数小于或等于第一个地址选择的行号,将仅选择对应于第一个地址的行)。 .sp .LP 通常,各地址之间以逗号 (,) 分隔。也可使用分号 (;) 进行分隔。 .SS "sed 正则表达式" .sp .LP \fBsed\fR 支持 \fBregexp\fR(5) 手册页中介绍的基本正则表达式,并包含以下补充内容: .sp .ne 2 .mk .na \fB\fI\cREc\fR \fR .ad .RS 10n .rt 在上下文地址中,\fI\cREc\fR 这个构造(其中 \fIc\fR 是指除反斜杠或\fB换行\fR符以外的任意字符)等同于 /\fIRE\fR/。如果 \fIc\fR 指定的字符出现在反斜杠之后,将被视为代表其原义的文本字符,而不会终止 RE。例如,在上下文地址 \fB\xabc\xdefx\fR 中,第二个 \fBx\fR 代表其本身,因此正则表达式应为 \fBabcxdef\fR。 .RE .sp .ne 2 .mk .na \fB\fB\n\fR \fR .ad .RS 10n .rt 转义序列 \fB\n\fR 与模式空间中嵌入的\fI换行\fR符匹配。字面意义的\fB换行\fR符不得用在上下文地址的正则表达式或替换命令中。 .RE .sp .LP 只能通过使用否定命令 \fB!\fR 将编辑命令应用到未选定的模式空间(下文将予以介绍)。 .SS "sed 编辑命令" .sp .LP 在下面所列出的函数中,指明了每个函数允许具备的最大地址数。 .sp .LP \fBr\fR 和 \fBw\fR 命令可使用可选的 \fIrfile\fR(或 \fIwfile\fR)参数,并通过一个或多个空白字符与命令字母隔开。 .sp .LP 同一个命令行中可以指定多个命令,各命令之间以分号 (\fB;\fR) 分隔。 .sp .LP \fItext\fR 参数包含一行或多行,所有行(最后一行除外)均以 \fB\\fR 结尾,以便隐藏\fB换行\fR。每个嵌入文本中的\fB换行\fR符必须在前面加上一个反斜杠。文本中的其他反斜杠将被删除,后跟字符将按字面原义处理。文本中的反斜杠与 \fBs\fR 命令的替换字符串中的反斜杠处理方式相同,并且可用于防止每个脚本行的起始空格和制表符被去除。命令行必须使用 \fIrfile\fR 或 \fIwfile\fR 参数结尾,并且参数前面必须只带一个空格。使用 \fIwfile\fR 参数将初次创建不存在的文件,或替换现有文件的内容。最多可以使用 10 个不同的 \fIwfile\fR 参数。 .sp .LP 正则表达式可以匹配整个字符串,而不只是单个行,但\fB换行\fR符将通过 \fBsed\fR RE 中的 \fB\n\fR 进行匹配。RE 中不允许使用\fB换行\fR符。还要注意的是,不能使用 \fB\n\fR 来匹配输入行末尾处的\fB换行\fR符;执行 \fBN\fR 编辑命令将导致模式空间中出现\fB换行\fR符。 .sp .LP 两个命令构成一个 \fIcommand-list\fR,即一个以\fB换行\fR符分隔的 \fBsed\fR 命令列表,如下所示: .sp .in +2 .nf { \fIcommand\fR \fIcommand\fR } .fi .in -2 .sp .LP \fB{\fR 前面可以有空白字符,后面可以跟空格。\fIcommand\fR 前面可以有空格。结尾的 \fB}\fR 前面必须带\fB换行\fR符,并且前后可以带空白字符。大括号前后可以带空白字符。命令的前面可以带空白字符,但后面不可以跟空白字符。 .sp .LP 下表列出了各个函数,并给出了允许使用的最大地址数。 .sp .sp .TS tab() box; cw(.92i) |cw(1.38i) |cw(3.21i) lw(.92i) |lw(1.38i) |lw(3.21i) . 最大地址数命令说明 _ 1\fBa\\fR \fItext\fRT{ 通过执行 \fBN\fR 命令或开始新周期来附加内容。在读取下一输入行之前将 \fItext\fR 置于输出中。 T} _ 2\fBb\fR \fIlabel\fRT{ 转移到带 \fIlabel\fR 的 \fB:\fR 命令。如果 \fIlabel\fR 为空,将转移到脚本末尾。标签具有唯一性,最多包含 8 个字符。 T} _ 2\fBc\\fR \fItext\fRT{ 进行更改。删除模式空间。将 \fItext\fR 置于输出中。开始下一个周期。 T} 2\fBd\fRT{ 删除模式空间。开始下一个周期。 T} _ 2\fBD\fRT{ 删除模式空间中直到第一个换行符的起始段。开始下一个周期。(请参见下面的 \fBN\fR 命令。) T} _ 2\fBg\fRT{ 将模式空间的内容替换为保留空间的内容。 T} _ 2\fBG\fRT{ 将保留空间的内容附加到模式空间。 T} _ 2\fBh\fRT{ 将保留空间的内容替换为模式空间的内容。 T} _ 2\fBH\fRT{ 将模式空间的内容附加到保留空间。 T} _ 1\fBi\\fR \fItext\fRT{ 插入。将 \fItext\fR 置于标准输出中。 T} _ 2\fBl\fRT{ \fB/usr/bin/sed\fR:将模式空间以明确形式列于标准输出中。不可列显字符采用八进制记法显示,长行将折叠。 T} _ T{ \fB/usr/xpg4/bin/sed\fR:将模式空间以明确形式列于标准输出中。不可列显字符采用八进制记法显示,长行将折叠。字符(\fB\\\fR、\fB\a\fR, \fB\b\fR、\fB\f\fR、\fB\r\fR、\fB\t \fR和 \fB\v\fR)将写入为对应的转义序列。未包含在该表中的不可输出字符,将按照字符中每个字节(最重要字节放在最前面)采用一个八进制三位数字(前面带一个反斜杠字符)的格式写入。如果系统中某个字节的大小大于 9 位,不可输出字符所采用的格式将取决于具体的实现。 T} T{ 长行将折叠,折叠点通过写入反斜杠并后跟\fB换行\fR来指明;发生折叠的长度并未指定,但应适用于输出设备。每行的末尾用一个 \fB$\fR 标记。 T} _ 2\fBn\fRT{ 将模式空间复制到标准输出(如果未禁止缺省输出)。使用下一行输入替换模式空间。 T} _ 2\fBN\fRT{ 将下一行输入附加到嵌入有换行符的模式空间。(当前行号将改变。)如果没有下一行输入可用,\fBN\fR 命令动词应转移到脚本结尾处并退出,且不开始新周期,也不写入模式空间。 T} _ 2\fBp\fRT{ 列显。将模式空间复制到标准输出。 T} _ 2\fBP\fRT{ 将模式空间中直到第一个换行符的起始段复制到标准输出。 T} _ 1\fBq\fRT{ 退出。转移到脚本结尾。不开始新周期。 T} _ 2\fBr\fR \fIrfile\fRT{ 读取 \fIrfile\fR 的内容。在读取下一输入行之前,将其置于输出中。如果 \fIrfile\fR 不存在或无法读取,将被视作空文件处理,从而不会导致错误情况。 T} _ 2\fBt\fR \fIlabel\fRT{ 测试。转移到带 \fIlabel\fR 的 \fB:\fR 命令(如果自最近读取输入行或执行 \fBt\fR 命令后进行过任何替换)。如果 \fIlabel\fR 为空,将转移到脚本末尾。 T} _ 2\fBw\fR \fIwfile\fRT{ 写入。将模式空间附加到 \fIwfile\fR。第一次出现 \fBw\fR 命令时,将导致 \fIwfile\fR 被清除。将附加对 \fBw\fR 命令的后续调用。每次使用 \fBsed\fR 命令,都会覆盖 \fIwfile\fR。 T} _ 2\fBx\fRT{ 交换模式空间和保留空间的内容。 T} _ 2\fB!\fR \fIcommand\fRT{ 否定。将 \fIcommand\fR(或组,如果 \fIcommand\fR 为 \fB{ \fR 的话)仅应用于\fI不是\fR由地址选择的行。 T} _ 0\fB:\fR \fIlabel\fRT{ 此命令不起任何作用;它带有 \fBb\fR 和 \fBt\fR 命令将要转移到的 \fIlabel\fR。 T} _ 1\fB=\fRT{ 将当前行号作为一行置于标准输出中。 T} _ 2\fB{\fR\fIcommand-list\fR\fB}\fRT{ 仅在选择了模式空间时执行 \fIcommand-list\fR。 T} 0空命令将被忽略。 _ 0\fB#\fRT{ 如果在脚本文件的某一行中,\fB#\fR 作为第一个字符出现,则该行整体将被视为注释,但是有一个例外:如果 \fB#\fR 出现在第一行,并且 \fB#\fR 后面的字符是 \fBn\fR,则会禁止缺省输出。行中 \fB#n\fR 后面的其余部分也将被忽略。脚本文件必须至少包含一个非注释行。 T} .TE .sp .sp .TS tab() box; cw(.92i) |cw(4.58i) lw(.92i) |lw(4.58i) . 最大地址数命令(使用 \fIstrings\fR)和说明 _ 2\fBs\fR/\fIregular expression\fR/\fIreplacement\fR/\fIflags\fR T{ 替换模式空间中 \fIregular expression\fR 实例的 \fIreplacement\fR 字符串。除反斜杠或换行符以外的任何字符均可代替斜杠用于分隔 RE 和替换的内容。在 RE 和替换的内容中,RE 分隔符如果在前面添加了反斜杠,本身将可以用作文本字符。 T} T{ \fIreplacement\fR 中出现的“与”符号 (\fB&\fR) 将替换为与 RE 匹配的字符串。可通过在 \fB&\fR 面添加反斜杠取消其在此上下文中的特殊含义。字符 \fB\\fR\fIn\fR(其中 \fIn\fR 为一个数字)将替换为对应的回溯引用表达式所匹配的文本。对于在从头至尾的 \fIreplacement\fR 扫描中遇到的每个反斜杠 (\),以下字符将失去其特殊含义(如果有的话)。对于除 &、\ 或数字以外的任何字符要被赋予哪些特殊含义,并未特别加以规定。 T} T{ 通过将\fB换行\fR符替换到行中,可以对行进行拆分。应用程序必须通过在前面添加反斜杠的方法对 \fIreplacement\fR 中的\fB换行\fR符进行转义。即使替换字符串与其替换的字符串完全相同,也认为执行了替换。 T} \fIflags\fR 表示零个或更多: T{ \fIn\fR \fIn\fR = 1 - 512。只替换第 \fI n\fR 次出现的 \fIregular expression\fR。 T} T{ \fBg\fR 全局。替换所有非重叠的 \fIregular expression\fR 实例,而不只是替换第一个。如果同时指定 \fIg\fR 和 \fIn\fR,结果将不确定。 T} _ T{ \fBp\fR 输出模式空间(如果已进行了替换)。 T} T{ \fBP\fR 将模式空间中直到第一个换行符的起始段复制到标准输出。 T} T{ \fBw\fR \fIwfile\fR 写入。将模式空间附加到 \fIwfile\fR(如果已进行了替换)。第一次出现 \fBw\fR 命令时,将导致 \fIwfile\fR 被清除。将附加对 \fBw\fR 命令的后续调用。每次使用 \fBsed\fR 命令,都会覆盖 \fIwfile\fR。 T} _ 2\fBy\fR/ \fIstring1\fR / \fIstring2\fR / T{ 转换。将 \fI string1\fR 中出现的所有字符替换为 \fIstring2\fR 中的对应字符。\fIstring1\fR 和 \fIstring2\fR 的字符数量必须相同,如果 \fIstring1 \fR 中的任意字符出现多次,结果将不确定。除反斜杠或\fB换行\fR以外的任何字符均可代替斜杠用于分隔字符串。在 \fIstring1\fR 和 \fIstring2\fR 中,该分隔符如果在前面添加了反斜杠,本身将可以用作文本字符。例如,\fBy\fR/abc/ABC/ 分别将 a、b 和 c 替换为 A、B 和 C。 T} .TE .sp .LP 有关 \fBsed\fR 遇到大于或等于 2 GB(2^31 字节)文件时行为的说明,请参见 \fBlargefile\fR(5)。 .SH 示例 .LP \fB示例 1 \fRsed 脚本示例 .sp .LP 此 \fBsed\fR 脚本模拟 \fBBSD \fR\fBcat\fR \fB-s\fR 命令,并压缩标准输入中多余的空白行。 .sp .in +2 .nf 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 (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 .in -2 .SH 环境变量 .sp .LP 有关影响 \fBsed\fR 执行的以下环境变量的说明,请参见 \fBenviron\fR(5):\fBLANG\fR、\fBLC_ALL\fR、\fBLC_COLLATE\fR、\fBLC_CTYPE\fR、\fBLC_MESSAGES\fR 和 \fBNLSPATH\fR。 .SH 退出状态 .sp .LP 将返回以下退出值: .sp .ne 2 .mk .na \fB\fB0\fR\fR .ad .RS 7n .rt 成功完成。 .RE .sp .ne 2 .mk .na \fB\fB>0\fR \fR .ad .RS 7n .rt 出现错误。 .RE .SH 属性 .sp .LP 有关下列属性的说明,请参见 \fBattributes\fR(5): .SS "/usr/bin/sed" .sp .sp .TS tab() box; cw(2.75i) |cw(2.75i) lw(2.75i) |lw(2.75i) . 属性类型属性值 _ 可用性system/core-os _ CSINot enabled(未启用) .TE .SS "/usr/xpg4/bin/sed" .sp .sp .TS tab() box; cw(2.75i) |cw(2.75i) lw(2.75i) |lw(2.75i) . 属性类型属性值 _ 可用性system/xopen/xcu4 _ CSIEnabled(已启用) _ 接口稳定性Committed(已确定) _ 标准请参见 \fBstandards\fR(5)。 .TE .SH 另请参见 .sp .LP \fBawk\fR(1)、\fBed\fR(1)、\fBgrep\fR(1)、\fBattributes\fR(5)、\fBenviron\fR(5)、\fBlargefile\fR(5)、\fBregexp\fR(5)、\fBstandards\fR(5)