SED(1)

名称
sed - 文本筛选和格式转换的流式编辑器

摘要
sed [选项]... {script-only-if-no-other-script} [输入文件]...

描述
Sed是一个流式编辑器。流式编辑器是用来在输入流（一个文件或者管道输入）中 完成基本文本转换的。当在一些允许脚本编辑的编辑器中（比如ed），sed通过将 输入传输为一个输入来工作，这样更高效。但是是sed的功能来过滤管道的文本并 从其他类型的编辑器中特别识别出这些文本。

-n, --quiet, --silent

    不自动打印模式空间的内容

-e 脚本, --expression=脚本

    添加脚本到将要执行的命令

-f 脚本文件, --file=脚本文件

    添加脚本文件的内容到即将执行的命令

--follow-symlinks

    处理已存在文件时跟随链接

-i[SUFFIX], --in-place[=SUFFIX]

    编辑已存在的文件（如果提供了SUFFIX作为后缀则做备份）

-l N, --line-length=N

    指定'l'命令需要的自动换行长度

--posix

    禁用所有GNU插件。

-E, -r, --regexp-extended

    在脚本中使用扩展正则表达式（为了可移植性，请使用符合POSIX的-E）

-s, --separate

    将多个文件分别看待，而非统一视作同个连续的流。

--sandbox

    在沙箱模式下操作。

-u, --unbuffered

    从输入文件中读取最少量的数据并更频繁地刷新输出缓冲区

-z, --null-data

    用NUL字符分割行

--help
    显示这个帮助并退出

--version
    输出版本信息并退出

如果没有给出-e，--expression，-f，或者--file选项， 那么第一个非选项参数会被当作sed脚本解释。所有余下的参数是输入文件的名称； 如果没有指定输入文件，那么就会读取标准输入。

GNU sed主页：<http://www.gnu.org/software/sed/>。使用GNU软件的通用帮助 ：<http://www.gnu.org/gethelp/>。Bug报告请发送电子邮件至：<bug-sed@gnu.org>。

命令摘要
这只是为已经知道sed命令和相关文档（例如texinfo文档），需要翻阅命令完整 描述的人准备的sed命令的简短摘要。

  零地址“命令”

: label
    b 和 t 命令的标签。

#comment
    注释将会延长到下一个新行 (或者一个 -e 脚本片段的结尾。）

}   一个{ }块的闭括号。

  零或一地址命令

=   答应当前行的行号。

a \

text
    追加 text, text可以通过预先写入反斜杠来嵌入新行。

i \

text
    插入 text, text可以通过预先写入反斜杠来嵌入新行。

q [exit-code]
    立即退出sed脚本而不处理其他输入，除非自动打印没有禁用使得当前模式 空间将会被打印。[exit-code]是GNU插件（扩展）。

Q [exit-code]
    立即退出sed脚本而不处理其他输入。这是一个GNU插件。

r 文件名
    从 文件名 读取内容并追加到最后。

R 文件名
    从 文件名 读取一行并追加到最后。每次调用这个命令就从文件中读取一 行。这是一个GNU插件。

  接受范围地址的命令

{   开始一个命令块（以一个}结束）。

b label
    程序跳转到label处;如果label被省略，跳转到脚本尾部。

c \

text
    用 text 代替选择的行, text 可以通过预先写入反斜杠来嵌入新行。

d   删除模式空间。 开始下一个循环。

D   如果模式空间包含新行，在d命令发布之后开始一个新的普通循环。否则， 删除模式空间中的text直到新行，并且在不读入新行的情况下，用结果的 模式空间开始一个循环。

h H 复制/追加模式空间到保存空间。

g G 复制/追加保存空间到模式空间。

l   用“直观明确”的格式列出当前行。

l width
    用“直观明确”的格式列出当前行，在width字符处结束。这是一个GNU插件。

n N 读取/追加下一行输入到模式空间。

p   输出当前的模式空间。

P   输出直到遇到当前模式空间的第一个嵌入的换行符。

s/regexp/replacement/
    尝试与模式空间匹配regexp，如果成功，用replacement代替匹配的部分 。replacement可能包含特殊字符&来引用模式空间中匹配的部分，而特殊 字符\1到\9则引用regexp中对应匹配的子表达式。

t label
    自上次输入行读取之后并且上次执行了t或者T命令之后，如果一个s///被 成功替换，那么跳转到label处;如果label被忽略，跳转到脚本结尾。

T label
    自上此输入行读取之后并借上次执行了t或者T命令之后，如果一个s///被 成功替换，那么跳转到label处;如果label被忽略，跳转到脚本结尾。这是 一个GNU插件。

w filename
    将当前的模式空间写入到filename中。

W filename
    写入当前模式空间的第一行到filename中。这是一个GNU插件。

x   交换模式空间和保存空间的内容。

y/source/dest/
    将模式空间中显示为source的字符用dest字符来写出。

地址
Sed命令可以没有指定地址，这样将会为所有行执行命令。如果给出了一个地址， 这样命令就只会为匹配此地址的行执行；如果给出了两个地址，这样命令将会对 从匹配的第一个地址到第二个地址的区域的所有输入行执行命令。 关于地址范围有三点：语法为：addr1 , addr2（比如，地址要用逗号分开）； addr1匹配的行一定会被接受，即使addr2选定的是更靠前的行；并且如果addr2是 一个regexp（正则表达式），它将不会重复测试addr匹配的行。

在地址（或地址范围）之后，在命令之前，可以插入一个!，这个符号定义的命令 只有在地址（地址范围）不匹配的时候才能执行。

支持下面的地址类型：

number
    只匹配行号为number的行。（除非-s选项在命令行中被指定，number值将 会按照文件数渐增。）

first~step
    匹配每一个第step行并从first开始计数。举个栗子，``sed -n 1~2p''将 打印出输入流所有奇数行，而地址2~5将匹配从第2行开始的，以5为步长的 行。first可以是零；这样，sed按其为step来操作。（这是一个插件。）

$   匹配最近的行。

/regexp/
    匹配符合正则表达式regexp的行。

\cregexpc
    匹配符合正则表达式regexp的行。 其中c可以是任意字符。

GNUsed同样支持某些特殊2地址格式：

0,addr2
    从“匹配了第一个地址”状态始，直到发现addr2。这和1, addr2很相似， 除了当addr2匹配了输入的第一行，0, addr2形式将在该范围的结尾；而 1, addr2形式仍然在该范围的开始。这种形式只有在addr2是正则表达式 的情况下才有效。

addr1,+N
    将会匹配 addr1 和在 addr1 之后的 N 行。

addr1,~N
    将会匹配 addr1 和 addr1 之后的输入行数是 N 倍的下一行。

正则表达式
POSIX.2 BREs应该是支持的，但是由于性能的原因，这个特性还不完全。其中 \n序列匹配换行符，\a、\t和其他序列也是类似的。-E选项开关用来选择是否使用扩展正则 表达式；-E选项已经由GNU sed支持了很多年，现已包含于POSIX中。

BUGS

请将错误报告发送至bug-sed@gnu.org。另外，请在邮件正文中尽量包含 ``sed --version''的信息。

作者
由 Jay Fenlason, Tom Lord, Ken Pizzini, 和 Paolo Bonzini写成。 GNU sed 主页: <http://www.gnu.org/software/sed/>. 使用 GNU 软件的一般性手册: <http://www.gnu.org/gethelp/>. E-mail bug 报告到: <bug-sed@gnu.org>.

版权
Copyright © 2017 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law.

参见
awk(1), ed(1), grep(1), tr(1), perlre(1), sed.info, 任何和sed相关的书籍， sed常见问题(http://sed.sf.net/grabbag/tutorials/sedfaq.txt)， http://sed.sf.net/grabbag/。

sed 的完整文档是作为Texinfo手册维护的。如果info和sed程序正确的安装， 可以执行

    info sed

命令来访问完整的手册。