/usr/bin/sed [-n] script [file]...
/usr/bin/sed [-n] [-e script]... [-f script_file]... [file]...
/usr/xpg4/bin/sed [-n] script [file]...
/usr/xpg4/bin/sed [-n] [-e script]... [-f script_file]... [file]...
sed 实用程序是一个流编辑器,用于读取一个或多个文本文件,根据编辑命令脚本进行编辑更改,并将结果写入至标准输出。脚本可以从 script 操作数字符串获得,也可以从 –e script 和 –f script_file 选项构成的选项参数组合获得。
sed 实用程序是一个文本编辑器。它无法编辑二进制文件或者包含 ASCII NUL (\0) 字符或很长行的文件。
支持以下选项:
script 是 sed 的一个编辑命令。有关 script 格式的更多信息,请参见下文的“用法”部分。如果只有一个 –e 选项而没有 –f 选项,可以省略标志 –e。
从 script_file 获取脚本。script_file 由编辑命令构成,每行一个命令。
禁止缺省输出。
可以指定多个 –e 和 –f 选项。所有命令将按指定顺序添加到脚本,无论其源自何处。
支持下列操作数:
要读取和编辑其内容的文件的路径名称。如果指定多个 file 操作数,将按指定顺序读取指定文件,并将编辑串联。如果未指定 file 操作数,将使用标准输入。
要作为编辑命令脚本使用的字符串。应用程序提供的脚本不得违反文本文件的限制,但最后一个字符不需要是 NEWLINE 字符。
脚本由编辑命令构成,每行一个命令,其形式如下:
[ address [ , address ] ] command [ arguments ]
第一个 address 之前以及 command 之前允许有零个或多个空白字符。第一个 address 之前允许有任意数量的分号。
在常规运行时,sed 会循环将一行输入(去掉结尾的 NEWLINE 字符)复制到一个模式空间(除非 D 命令后面跟有某些内容),依次应用其 address 选择了该模式空间的所有命令,然后将所得到的模式空间复制到标准输出(除非使用了 –n)并删除该模式空间。每次将模式空间写入标准输出或指定文件时,sed 会立即在其后面加上一个 NEWLINE 字符。
某些命令将使用一个保留空间来保存全部或部分模式空间,以供后续检索使用。每个模式空间和保留空间都能够至少容纳 8192 个字节。
address 可以为空,可以是一个跨多个文件累加计算输入行计数的十进制数,一个 $(用于确定最后一行输入的位置),也可以是一个上下文地址(包含如 regexp(5) 手册页中所述的 /regular expression/)。
没有地址的命令行会选择每个模式空间。
有一个地址的命令行会选择每个与该地址匹配的模式空间。
有两个地址的命令行将从与第一个地址匹配的第一个模式空间到与第二个地址匹配的下一个模式空间的范围内进行选择(包含二者)。此后,将重复执行该过程,再次查找第一个地址。(如果表示第二个地址的数小于或等于第一个地址选择的行号,将仅选择对应于第一个地址的行)。
通常,各地址之间以逗号 (,) 分隔。也可使用分号 (;) 进行分隔。
sed 支持 regexp(5) 手册页中介绍的基本正则表达式,并包含以下补充内容:
在上下文地址中,\cREc 这个构造(其中 c 是指除反斜杠或换行符以外的任意字符)等同于 /RE/。如果 c 指定的字符出现在反斜杠之后,将被视为代表其原义的文本字符,而不会终止 RE。例如,在上下文地址 \xabc\xdefx 中,第二个 x 代表其本身,因此正则表达式应为 abcxdef。
转义序列 \n 与模式空间中嵌入的 NEWLINE 字符匹配。字面意义的 NEWLINE 字符不得用在上下文地址的正则表达式或替换命令中。
只能通过使用否定命令 ! 将编辑命令应用到未选定的模式空间(下文将予以介绍)。
在下面所列出的函数中,指明了每个函数允许具备的最大地址数。
r 和 w 命令可使用可选的 rfile(或 wfile)参数,并通过一个或多个空白字符与命令字母隔开。
同一个命令行中可以指定多个命令,各命令之间以分号 (;) 分隔。
text 参数包含一行或多行,所有行(最后一行除外)均以 \ 结尾,以便隐藏 NEWLINE。每个嵌入文本中的 NEWLINE 字符必须在前面加上一个反斜杠。文本中的其他反斜杠将被删除,后跟字符将按字面原义处理。文本中的反斜杠与 s 命令的替换字符串中的反斜杠处理方式相同,并且可用于防止每个脚本行的起始空格和制表符被去除。命令行必须使用 rfile 或 wfile 参数结尾,并且参数前面必须只带一个空格。使用 wfile 参数将初次创建不存在的文件,或替换现有文件的内容。最多可以使用 10 个不同的 wfile 参数。
正则表达式可以匹配整个字符串,而不只是单个行,但 NEWLINE 字符将通过 sed RE 中的 \n 进行匹配。RE 中不允许使用 NEWLINE 字符。还要注意的是,不能使用 \n 来匹配输入行末尾处的 NEWLINE 字符;执行 N 编辑命令将导致模式空间中出现 NEWLINE 字符。
两个命令构成一个 command-list,即一个以 NEWLINE 字符分隔的 sed 命令列表,如下所示:
{ command command }
{ 前面可以有空白字符,后面可以跟空格。command 前面可以有空格。结尾的 } 前面必须带 NEWLINE 字符,并且前后可以带空白字符。大括号前后可以带空白字符。命令的前面可以带空白字符,但后面不可以跟空白字符。
下表列出了各个函数,并给出了允许使用的最大地址数。
|
|
有关 sed 遇到大于或等于 2 GB(231 字节)文件时行为的说明,请参见 largefile(5)。
此 sed 脚本模拟 BSD cat –s 命令,并压缩标准输入中多余的空白行。
sed −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 '
有关影响 sed 执行的以下环境变量的描述,请参见 environ(5):LANG、LC_ALL、LC_COLLATE、LC_CTYPE、LC_MESSAGES 和 NLSPATH。
将返回以下退出值:
成功完成。
出现错误。
有关下列属性的说明,请参见 attributes(5):
|
|
awk(1)、ed(1)、grep(1)、attributes(5)、environ(5)、largefile(5)、regexp(5)、standards(5)