Linux sed命令介绍
sed是一个流编辑器,它的全称是stream editor。它可以对文件或管道中的文本进行编辑,但是它不提供交互式的文本编辑器界面。相反,你需要为它提供一些指令,让它按照指令来处理文本。这些指令可以在命令行中输入,也可以写在一个脚本文件中。
sed最常用的功能是替换文本。它可以在文件或管道中搜索指定的模式,并用想要的字符串来替换它。sed还可以选择、添加、删除、修改文本中的内容,以及对原始文件进行保存或不保存的操作。
sed的模式匹配和文本选择功能依赖于正则表达式(regex)。要想有效地使用sed,你需要对正则表达式有一定的了解。
适用的Linux版本
sed可以在大多数Linux发行版中安装和使用,它是GNU项目的一部分。如果你的Linux系统没有预先安装sed,你可以从GNU网站下载源代码并自己编译安装。编译安装的过程很简单,只需要执行以下命令:
[linux@bashcommandnotfound.cn ~]$ ./configure
[linux@bashcommandnotfound.cn ~]$ make
[linux@bashcommandnotfound.cn ~]$ sudo make install
不同的Linux发行版可能使用不同的包管理工具来安装软件包,例如CentOS 7和CentOS 8分别使用yum和dnf。如果你想使用包管理工具来安装sed,你可以根据你的Linux发行版选择相应的命令,例如:
- CentOS 7或Red Hat Enterprise Linux 7
[linux@bashcommandnotfound.cn ~]$ sudo yum install sed
- CentOS 8或Red Hat Enterprise Linux 8
[linux@bashcommandnotfound.cn ~]$ sudo dnf install sed
- Debian或Ubuntu
[linux@bashcommandnotfound.cn ~]$ sudo apt install sed
- Fedora
[linux@bashcommandnotfound.cn ~]$ sudo dnf install sed
- Arch Linux或Manjaro
[linux@bashcommandnotfound.cn ~]$ sudo pacman -S sed
Linux sed命令的基本用法
sed命令的语法格式如下:
sed [options] [script] [inputfile...]
其中,options是可选的参数,用于指定一些编辑器的设置或功能;script是包含指令的脚本文件或字符串;inputfile是要编辑的文件名,可以是一个或多个,如果没有指定文件名,则从标准输入读取。
Linux sed命令的常用选项说明
sed命令有很多选项,可以用来控制编辑器的行为和外观。以下是一些常用的选项:
选项 | 说明 |
---|---|
-e script | 在命令行中指定一个或多个指令 |
-f scriptfile | 指定一个包含指令的脚本文件 |
-i | 对原始文件进行修改并保存 |
-n | 不输出模式空间中的内容 |
-r | 使用扩展正则表达式 |
-s | 将多个文件视为一个文件处理 |
-v | 显示版本信息 |
Linux sed命令的常用指令说明
sed命令支持多种指令,可以用来对文本进行各种操作。以下是一些常用的指令:
指令 | 说明 |
---|---|
a\text | 在当前行后面追加文本 |
c\text | 用文本替换当前行 |
d | 删除当前行 |
i\text | 在当前行前面插入文本 |
p | 打印当前行 |
q | 退出sed |
r file | 读取文件并将其内容插入到当前行后面 |
s/old/new/ | 用新字符串替换旧字符串 |
w file | 将当前行写入文件 |
y/source/dest/ | 将源字符集中的字符替换为目标字符集中的字符 |
Linux sed命令的实例
以下是一些使用sed命令的实例:
- 在命令行中使用echo命令发送一些文本到sed,然后用sed替换其中的一部分文本
[linux@bashcommandnotfound.cn ~]$ echo howtogonk | sed 's/gonk/geek/'
- 打开一个文件并用sed替换其中的一部分文本
[linux@bashcommandnotfound.cn ~]$ sed 's/hello/world/' input.txt > output.txt
- 在命令行中指定多个指令并用sed对文件进行编辑
[linux@bashcommandnotfound.cn ~]$ sed -e 's/hello/world/' -e 's/foo/bar/' input.txt > output.txt
- 指定一个包含指令的脚本文件并用sed对文件进行编辑
[linux@bashcommandnotfound.cn ~]$ echo 's/hello/world/' > myscript.sed
[linux@bashcommandnotfound.cn ~]$ sed -f myscript.sed input.txt > output.txt
- 对原始文件进行修改并保存
[linux@bashcommandnotfound.cn ~]$ sed -i 's/hello/world/' input.txt
- 使用扩展正则表达式进行模式匹配和替换
[linux@bashcommandnotfound.cn ~]$ sed -r 's/([0-9]+) ([a-z]+)/\2 \1/' input.txt > output.txt
- 删除空白行
[linux@bashcommandnotfound.cn ~]$ sed '/^$/d' input.txt > output.txt
- 在每行前面添加行号
[linux@bashcommandnotfound.cn ~]$ sed '=' input.txt | sed 'N;s/\n/ /' > output.txt
- 将文本中的大写字母转换为小写字母
[linux@bashcommandnotfound.cn ~]$ sed 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/' input.txt > output.txt
Linux sed命令的注意事项
- sed命令有很多指令和选项,如果不熟悉,可以使用man sed或info sed来查看帮助信息。
- sed命令支持基本正则表达式(BRE)和扩展正则表达式(ERE),可以用-r选项来切换。
- sed命令可以使用地址来选择要处理的行,地址可以是数字、正则表达式或范围。
- sed命令可以使用模式空间和保持空间来存储和操作文本,可以使用n,N,d,D,g,G,h,H,p,P等指令来控制它们。
快捷键
sed命令在执行指令时,可以使用一些快捷键来简化输入或修改操作。以下是一些常用的快捷键:
快捷键 | 说明 |
---|---|
& | 代表上一个替换指令中匹配到的字符串 |
\1,\2,... | 代表上一个替换指令中匹配到的第一个、第二个...子表达式 |
g | 在替换指令中表示对所有匹配项进行替换,而不是只替换第一个 |
i,I | 在替换指令中表示忽略大小写 |
w,W | 在替换指令中表示只匹配单词 |
评论区