目录
一、sed概述
1、sed的原理
sed是一种流编辑器,流编辑器会在编辑器处理数据之前基于预先提供一组规则来编辑数据流。
sed编辑器可以根据命令来处理数据流中的数据,这些命令要么从命令行中输入,要么存储在一个命令文本中。
2、sed的流程
(1)读取流程
sed从输入流(文件、管道、标准输入)中读取一行内容并存储到临时的缓冲区中(又称模式空间)
(2)执行流程
默认情况下,所有的sed命令都在模式空间中顺利地执行,除非指定了行的地址,否则sed命令,将会在所有的行上依次执行。
(3)显示流程
发送修改后的内容到输出流。在发送数据后,模式空间将会被清空,在所有的文件内容都被完成处理之前,上述过程被反复执行,直至内容被处理完。
3、sed的常见选项
(1)命令格式
sed -e '操作' 文件1 文件2
sed -n -e '操作' 文件1 文件2
sed -f 脚本文件 文件1 文件2
sed -e -i '操作' 文件1 文件2
(2)常见选项
(1)-e 或 --expression
表示用指定命令来处理输入的文本文件,只有一个操作命令时可以省略,一般在执行多个操作命令使用。
(2)-f 或 --file
表示用指定脚本文件来处理输入的文本文件
(3)-h 或 --help
显示帮助
(4)-n 或 s --quiet
禁止sed编辑器输出,但可以与p命令一起使用完成输出
(5)i
直接修改文本文件
(3)常用操作
(1)s
替换指定字符
(2)d
删除指定的行
(3)a
在指定的行上一行增加一行指定内容
(4)i
在指定的上一行插入一行指定内容
(5)c
将选定行内容替换成指定内容
(6)y
字符转换,转换之后的字符长度必须相同
(7)p
打印,如果同时指定行,表示打印指定行;如果不指定行,则表示打印所有内容; 如果有非打印字符,则以 AscII码输出。其通常与_n"选项一起使用
(8)=
打印行号
(9)l
打印数据流中的文本和不可打印的ASCII字符(比如结束符s、制表符\t)
二、sed的使用
1、sed的查操作
(1)方法一
使用sed命令查看/etc/shdaow
[root@localhost ~]# sed ' ' /etc/shadow
root:$6$3Rfh74ZoYVL60OLJ$atijevnzniTepczYYLv.WAJ9bmIT0vuOlM.7prgCRUjAeiDoeKd89c96baB32ajZH6G1/rq6DuVXyf3ktp7jY/::0:99999:7:::
bin:*:17110:0:99999:7:::
daemon:*:17110:0:99999:7:::
adm:*:17110:0:99999:7:::
lp:*:17110:0:99999:7:::
sync:*:17110:0:99999:7:::
shutdown:*:17110:0:99999:7:::
halt:*:17110:0:99999:7:::
mail:*:17110:0:99999:7:::
operator:*:17110:0:99999:7:::
(2) 方法二
[root@localhost ~]# sed -n 'p ' /etc/shadow
root:$6$3Rfh74ZoYVL60OLJ$atijevnzniTepczYYLv.WAJ9bmIT0vuOlM.7prgCRUjAeiDoeKd89c96baB32ajZH6G1/rq6DuVXyf3ktp7jY/::0:99999:7:::
bin:*:17110:0:99999:7:::
daemon:*:17110:0:99999:7:::
adm:*:17110:0:99999:7:::
lp:*:17110:0:99999:7:::
sync:*:17110:0:99999:7:::
shutdown:*:17110:0:99999:7:::
halt:*:17110:0:99999:7:::
mail:*:17110:0:99999:7:::
operator:*:17110:0:99999:7:::
查看指定行
[root@localhost ~]# sed -n '3p' /etc/shadow
daemon:*:17110:0:99999:7:::
使用正则表达式
匹配root开头的行
[root@localhost ~]# sed -n '/^root/p' /etc/shadow
root:$6$3Rfh74ZoYVL60OLJ$atijevnzniTepczYYLv.WAJ9bmIT0vuOlM.7prgCRUjAeiDoeKd89c96baB32ajZH6G1/rq6DuVXyf3ktp7jY/::0:99999:7:::
查看连续的行
查看/etc/shadow的3到6行的内容
[root@localhost ~]# sed -n '3,6p' /etc/shadow
daemon:*:17110:0:99999:7:::
adm:*:17110:0:99999:7:::
lp:*:17110:0:99999:7:::
sync:*:17110:0:99999:7:::
查看文件最后一行的内容
[root@localhost ~]# sed -n '$p' /etc/shadow
zs:$6$LA7n3jCI3IvhMBHS$.9YqBUKpKwb9DHSIPX9KDVV4YJ5g04GxFQI8jdGx8XJoMqEgkdLrlAd03ahyCcjejZ7iKuO.Iv5OSlGxoSCTD.::0:99999:7:::
2、sed的删操作
删除指定行并不是真正删除,只是将删除了的结果显示出来,并不是真正删除了,如果想运行在文本中需要配合-i命令
删除文本中空行的操作
[root@localhost ~]# sed '/^$/d' test.txt
12
24
23
334
234
删除文件指定的行
[root@localhost ~]# sed '2d' t2.txt
123
789
321
451
3、替换
命令格式
sed 指定行 's/需要替换的字符串/替换后的字符串/替换标记
(1)g
表示要替换所有匹配的行
(2)w
将替换后的结果保存到文档
将文件中321替换成345
[root@localhost ~]# sed 's/321/345/' t2.txt
123
456
789
345
451
4、sed的增加内容操作
在第二行下方添加234
[root@localhost ~]# sed '2a 234' t2.txt
123
456
234
789
321
451