sed
是一个流编辑器,用于对输入流(或文件)进行基本的文本转换。以下是 sed
命令的详细输出说明文档:
1. 基本语法
sed [OPTIONS]... [SCRIPT] [INPUTFILE...] |
OPTIONS
:可选的命令行选项,如-i
用于直接修改文件。SCRIPT
:要执行的sed
命令或脚本。INPUTFILE
:要处理的输入文件。如果没有指定,则默认为标准输入。
2. 命令行选项
-n
:不打印模式空间的内容,除非指定了p
命令。-e SCRIPT
或--expression=SCRIPT
:添加SCRIPT
到要执行的命令中。-f SCRIPTFILE
或--file=SCRIPTFILE
:从SCRIPTFILE
读取sed
命令。-i[SUFFIX]
或--in-place[=SUFFIX]
:直接修改文件内容,而不是输出到标准输出。如果指定了SUFFIX
,则创建原始文件的备份,备份文件的扩展名为SUFFIX
。--follow-symlinks
:在-i
模式下,如果文件是符号链接,则修改符号链接指向的文件,而不是符号链接本身。- ...(还有其他选项,但上述是最常用的)
3. sed 命令
sed
命令通常由一个地址(模式)和一个操作组成,格式为 ADDRESSCOMMAND
或 ADDRESS{COMMANDS}
。
ADDRESS
:可以是一个数字(行号)、正则表达式或模式范围。COMMAND
:要执行的操作,如p
(打印)、d
(删除)、s/REGEXP/REPLACEMENT/
(替换)等。
示例命令
-
打印文件的所有内容(虽然这通常使用
cat
,但sed
也可以做到):
sed -n 'p' filename |
-
删除所有包含 "pattern" 的行:
sed '/pattern/d' filename |
-
替换 "foo" 为 "bar":
sed 's/foo/bar/' filename |
(注意:默认只替换每行中的第一个匹配项。要替换所有匹配项,请使用 g
标志:s/foo/bar/g
)
4. 在 "foo" 前后添加 "bar"(使用 &
符号):
sed 's/foo/bar&baz/' filename |
-
使用多个命令:
sed -e 's/foo/bar/' -e '/baz/d' filename |
或
sed 's/foo/bar/; /baz/d' filename |
-
处理特定行:
-
打印第 3 行:
sed -n '3p' filename
-
删除从第 2 行到包含 "end" 的行(包括 "end"):
sed '2,/end/d' filename
-
4. 脚本文件
你可以将 sed
命令保存在一个文件中,并使用 -f
选项执行它。例如,假设你有一个名为 script.sed
的文件,其中包含以下命令:
s/foo/bar/ | |
/baz/d |
你可以这样执行它:
sed -f script.sed filename |
5. 注意事项
- 使用
-i
选项时要小心,因为它会直接修改文件内容。 sed
的正则表达式默认使用基本正则表达式(BRE)。如果你需要更强大的功能,可以考虑使用扩展正则表达式(ERE),但请注意sed
在不同平台上的行为可能会有所不同。在某些sed
版本中,你可以使用-E
选项来启用 ERE。sed
的输出默认是发送到标准输出的。如果你想要修改文件并保存更改,请使用-i
选项。