sed
是stream editor
的缩写,意为流编辑器。它是一种在命令行下处理文本文件的工具。sed
主要用于自动编辑一个或多个文件、简化对文件的反复操作、编写转换程序等。
sed
命令在大多数Linux发行版中都是预装的,包括但不限于Ubuntu、Debian、Fedora、CentOS等。如果你发现你的系统中没有预装sed
,你可以使用你的包管理器来安装。例如,在CentOS 7中,你可以使用yum
来安装:
[linux@bashcommandnotfound.cn ~]$ sudo yum install sed
在CentOS 8和其他使用dnf
的发行版中,你可以使用:
[linux@bashcommandnotfound.cn ~]$ sudo dnf install sed
sed
命令的基本语法如下:
sed [options] 'command' file(s)
这里,options
是sed
命令的选项,command
是你要sed
执行的命令,file(s)
是你要处理的文件。
以下是sed
命令的一些常用选项:
选项 | 描述 |
---|---|
-n | 安静模式。在一般 sed 的用法中,所有来自 STDIN 的数据一般都会被列出到终端上。但如果加上 -n 参数后,则只有经过 sed 特殊处理的那一行(或者动作)才会被列出来。 |
-e | 直接在命令列模式上进行 sed 的动作编辑。 |
-f | 直接将 sed 的动作写在一个文件内, -f filename 则可以运行 filename 内的 sed 动作。 |
-r | sed 的动作支持的是基础正则表达式,这样不支持 ? 、+ 和 {} 等特殊字符。但如果加上 -r 参数,则可以支持扩展型正则表达式。 |
-i | 直接修改读取的文件内容,而不是由屏幕输出。 |
以下是一些sed
命令的实例:
[linux@bashcommandnotfound.cn ~]$ sed -n 'p' file.txt
这个命令会打印file.txt
文件的内容。
[linux@bashcommandnotfound.cn ~]$ sed '/^$/d' file.txt
这个命令会删除file.txt
文件中的空白行。
[linux@bashcommandnotfound.cn ~]$ sed 's/test/TEST/' file.txt
这个命令会将file.txt
文件中的第一个test
替换为TEST
。
[linux@bashcommandnotfound.cn ~]$ sed 's/^/Hello, /' file.txt
这个命令会在file.txt
文件的每一行的开头添加Hello,
。
[linux@bashcommandnotfound.cn ~]$ sed 's/$/ --End/' file.txt
这个命令会在file.txt
文件的每一行的结尾添加 --End
。
[linux@bashcommandnotfound.cn ~]$ sed '3d' file.txt
这个命令会删除file.txt
文件的第三行。
[linux@bashcommandnotfound.cn ~]$ sed 's/test/TEST/g' file.txt
这个命令会将file.txt
文件中的所有test
替换为TEST
。
[linux@bashcommandnotfound.cn ~]$ sed -n '/pattern/p' file.txt
这个命令会打印file.txt
文件中所有包含pattern
的行。
[linux@bashcommandnotfound.cn ~]$ sed '3s/test/TEST/' file.txt
这个命令会将file.txt
文件的第三行中的test
替换为TEST
。
[linux@bashcommandnotfound.cn ~]$ sed '3i\Hello, World!' file.txt
这个命令会在file.txt
文件的第三行之前插入Hello, World!
。
[linux@bashcommandnotfound.cn ~]$ sed '3a\Hello, World!' file.txt
这个命令会在file.txt
文件的第三行之后追加Hello, World!
。
[linux@bashcommandnotfound.cn ~]$ sed '3,5s/test/TEST/' file.txt
这个命令会将file.txt
文件的第三行到第五行中的test
替换为TEST
。
[linux@bashcommandnotfound.cn ~]$ sed '3,5d' file.txt
这个命令会删除file.txt
文件的第三行到第五行。
[linux@bashcommandnotfound.cn ~]$ sed '/pattern/s/test/TEST/' file.txt
这个命令会将file.txt
文件中包含pattern
的行中的test
替换为TEST
。
[linux@bashcommandnotfound.cn ~]$ sed '/pattern/d' file.txt
这个命令会删除file.txt
文件中包含pattern
的行。
[linux@bashcommandnotfound.cn ~]$ sed 's/test/TEST/gI' file.txt
这个命令会将file.txt
文件中的所有test
(忽略大小写)替换为TEST
。
[linux@bashcommandnotfound.cn ~]$ sed '3,5s/test/TEST/gI' file.txt
这个命令会将file.txt
文件的第三行到第五行中的test
(忽略大小写)替换为TEST
。
[linux@bashcommandnotfound.cn ~]$ sed '/pattern/s/test/TEST/gI' file.txt
这个命令会将file.txt
文件中包含pattern
的行中的test
(忽略大小写)替换为TEST
。
[linux@bashcommandnotfound.cn ~]$ sed '/pattern/Id' file.txt
这个命令会删除file.txt
文件中包含pattern
(忽略大小写)的行。
[linux@bashcommandnotfound.cn ~]$ sed 's/^/Start /; s/$/ End/' file.txt
这个命令会在file.txt
文件的每一行的开头添加Start
,并在每一行的结尾添加 End
。
sed
命令默认不会修改文件内容,如果需要修改文件,可以使用-i
选项。sed
命令时遇到bash: sed: command not found
错误,你可能需要安装sed
。你可以使用你的包管理器(如yum
或dnf
)来安装。更多详细内容可以参考:
linux入门学习教程 - Linux入门自学网
Linux下sed命令用法详解:流编辑器的使用教程和技巧
Linux comm命令教程:如何比较两个文件的内容(附案例详解和注意事项)