sed - 用于过滤和转换文本的流编辑器
概要
sed [-V] [--version] [--help] [-n] [--quiet] [--silent]
[-l N] [--line-length=N] [-u] [--unbuffered]
[-E] [-r] [--regexp-extended]
[-e script] [--expression=script]
[-f script-file] [--file=script-file]
[script-if-no-other-script]
[file...]
描述
Sed 是一种流编辑器。流编辑器用于对输入流(文件或来自管道的输入)执行基本的文本转换。虽然在某些方面与允许脚本编辑的编辑器(如 ed)类似,但 sed 通过只对输入进行一次处理,从而更有效。但 sed 过滤管道中文本的能力使其与其他类型的编辑器有所区别。
-n, --quiet, --silent
禁止自动打印模式空间
--debug
注释程序执行
-e script, --expression=script
将脚本添加到要执行的命令中
-f script-file, --file=script-file
将 script-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
在沙箱模式下运行(禁用 e/r/w 命令)。
-u, --unbuffered
从输入文件加载少量数据,并更频繁地刷新输出缓冲区
-z, --null-data
用 NUL 字符分隔行
--help
显示此帮助并退出
--version
输出版本信息并退出
如果没有提供 -e、--expression、-f 或 --file 选项,则将第一个非选项参数视为要解释的 sed 脚本。所有剩余参数都是输入文件的名称;如果没有指定输入文件,则读取标准输入。
GNU sed 主页:[https://www.gnu.org/software/sed/]。使用 GNU 软件的常规帮助:[https://www.gnu.org/gethelp/>。将错误报告发送到:[_]。
由 Debian 包装。版权所有 © 2022 自由软件基金会。许可证 GPLv3+:GNU GPL 版本 3 或更高版本 [https://gnu.org/licenses/gpl.html]。这是一个自由软件:您可以自由地更改和重新分发它。在法律允许的范围内,不提供任何保证。
命令概要
这只是 sed 命令的简要摘要,旨在提醒那些已经了解 sed 的人;必须查阅其他文档(如 texinfo 文档),以获取更完整的描述。
零地址 ``命令''
: label
b 和 t 命令的标签。
#comment
注释直到下一个换行符(或 -e 脚本片段的结尾)。
}
{ } 块的结束括号。
零个或一个地址的命令
=
打印当前行号。
a \
text
追加文本,其中每个嵌入的换行符前面都有一个反斜杠。
i \
text
插入文本,其中每个嵌入的换行符前面都有一个反斜杠。
q [exit-code]
立即退出 sed 脚本,而不处理任何更多输入,但如果未禁用 autoprint,则会打印当前模式空间。exit-code 参数是 GNU 扩展。
Q [exit-code]
立即退出 sed 脚本,而不处理任何更多输入。这是一个 GNU 扩展。
r filename
追加从 filename 读取的文本。
R filename
追加从 filename 读取的一行。每次调用该命令都会从文件中读取一行。这是一个 GNU 扩展。
接受地址范围的命令
{
开始一个命令块(以 } 结束)。
b label
分支到 label;如果省略 label,则分支到脚本的末尾。
c \
text
用文本替换选定的行,其中每个嵌入的换行符前面都有一个反斜杠。
d
删除模式空间。开始下一个周期。
D
如果模式空间不包含换行符,则开始一个正常的新的周期,就好像发出 d 命令一样。否则,删除模式空间中直到第一个换行符的文本,并重新启动周期,模式空间将是结果,而不读取新的输入行。
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 是一个正则表达式,它将不会对 addr1 匹配的行进行测试。
在地址(或地址范围)之后,在命令之前,可以插入一个 !,它指定该命令仅在地址(或地址范围)不匹配时执行。
支持以下地址类型:
number 仅匹配指定的行号(在所有文件中,行号会累积递增,除非在命令行中指定了 -s 选项)。
first~step
从第一行开始,每隔 step 行匹配一次。例如,``sed -n 1~2p`` 将打印输入流中的所有奇数行,地址 2~5 将从第二行开始,每隔五行匹配一次。first 可以为零;在这种情况下,sed 的行为就像它等于 step 一样。(这是一个扩展。)
$ 匹配最后一行。
/regexp/
匹配与正则表达式 regexp 匹配的行。匹配是在当前模式空间上执行的,该模式空间可以使用诸如 ``s///'' 之类的命令进行修改。
\cregexpc
匹配与正则表达式 regexp 匹配的行。c 可以是任何字符。
GNU sed 还支持一些特殊的双地址形式:
0addr2
从“匹配的第一个地址”状态开始,直到找到 addr2。这类似于 1,addr2,但如果 addr2 匹配输入的第一行,则 0,addr2 形式将位于其范围的末尾,而 1,addr2 形式仍然位于其范围的开头。这仅在 addr2 是正则表达式时有效。
addr1,+N
将匹配 addr1 及其后的 N 行。
addr1,~N
将匹配 addr1 及其后的行,直到下一行,该行的输入行号是 N 的倍数。
正则表达式
应支持 POSIX.2 BRE,但由于性能问题,它们并不完全支持。正则表达式中的 \n 序列匹配换行符,以及 \a、\t 和其他序列。-E 选项切换为使用扩展正则表达式;GNU sed 已经支持多年,现在包含在 POSIX 中。
错误
将错误报告发送到 _。此外,如果可能,请在报告正文中包含 ``sed --version'' 的输出。
作者
Jay Fenlason、Tom Lord、Ken Pizzini、Paolo Bonzini、Jim Meyering 和 Assaf Gordon 编写。
此 sed 程序是使用 SELinux 支持构建的。SELinux 在此系统上已禁用。
GNU sed 主页:[https://www.gnu.org/software/sed/]。使用 GNU 软件的常规帮助:[https://www.gnu.org/gethelp/]。将错误报告发送到:<_]。
参阅
awk(1)、ed(1)、grep(1)、tr(1)、perlre(1)、sed.info、关于 sed 的各种书籍,sed FAQ(http://sed.sf.net/grabbag/tutorials/sedfaq.txt)、http://sed.sf.net/grabbag/。
sed 的完整文档作为 Texinfo 手册进行维护。如果 info 和 sed 程序已正确安装在您的站点上,则命令
info sed
应为您提供对完整手册的访问权限。