sed编辑器

网友投稿 273 2022-11-04

sed编辑器

一、sed编辑器

sed是一种流编辑器,流编辑器会在编辑器处理数据之前基于预先提供的一组规则来编辑数据流。sed编辑器可以根据命令来处理数据流中的数据,这些命令要么从命令行中输入,要么存储在一个命令文本文件中。

sed的工作流程主要包括读取、执行和显示三个过程

操作顺序 说明
读取 sed从输入流(文件、管道、标准输入)中读取一行内容并存储到临时的缓冲区中(又称模式空间,patternspace)
执行 默认情况下,所有的sed命令都在模式空间中顺序地执行,除非指定了行的地址,否则sed命令将会在所有的行上依次执行
显示 发送修改后的内容到输出流。在发送数据后,模式空间将会被清空。在所有的文件内容都被处理完成之前,上述过程将重复执行直至所有内容被处理完。在所有的文件内容都被处理完成之前,.上述过程将重复执行,直至所有内容被处理完。

==注意:默认情况下所有的sed命令都是在模式空间内执行的,因此输入的文件并不会发生任何变化,除非是用重定向存储输出==

二、sed命令

1.格式

命令格式

sed -e '操作' 文件1 文件2 ... sed -n -e '操作' 文件1 文件2 ... sed -f 脚本文件 文件1 文件2 ... sed -i -e '操作' 文件1 文件2 ...

sed -e 'n{ 操作1 操作2 }' 文件1 文件2 ...

2.常用选项

选项 说明
-e 表示用指定命令来处理输入的文本文件,只有一个操作命令时可省略,一般在执行多个操作命令使用
-f 表示用指定的脚本文件来处理输入的文本文件
-h 显示帮助
-n、- -quiet 或者 silent 禁止sed编辑器输出,但可以与p命令一起使用完成输出
-i 直接修改目标文本文件

3.常用操作

选项 说明
s 替换,替换指定字符
d 删除,删除选定的行
a 增加,在当前行下面增加一行2指定内容
i 插入,在选定行上面插入一行指定内容
c 替换,将选定行替换指定内容
y 字符转换,转换前后的字符长度必须相同
p 打印,如果同时指定行,表示打印指定行;如果不指定行,则表示打印所有内容;如果有非打印字符,则以ASCII码输出。共通常与“-n”选项一起使用。
= 打印行号
l(小写L) 打印数据流中的文本和不可打印的ASCII字符( 比如结束符$、制表符\t)
r 读取指定文件
w 保存为文件

4.执行

1.打印内容

[root@localhost sed]# sed -n -e 'p' 1.txt

[root@localhost sed]# sed '=' 1.txt [root@localhost sed]# sed -n -e '=' 1.txt

[root@localhost sed]# sed -n -e 'l' 1.txt

=;p 先显示行号然后显示内容 [root@localhost sed]# sed -n -e '=;p' 1.txt [root@localhost sed]# sed -n -e '=' -e 'p' 1.txt [root@localhost sed]# sed -n ' > = > p > ' 1.txt p;= 先显示内容然后显示行号 [root@localhost sed]# sed -n -e 'p;=' 1.txt [root@localhost sed]# sed -n -e 'p' -e '=' 1.txt [root@localhost sed]# sed -n ' > p > = > ' 1.txt

2.寻址方式

显示第n行 [root@localhost sed]# sed -n 'np' 1.txt 显示第一行 [root@localhost sed]# sed -n '1p' 1.txt 显示最后一行 [root@localhost sed]# sed -n '$p' 1.txt

显示2到尾行 [root@localhost sed]# sed -n '2,$p' 1.txt 显示第n到第m行 [root@localhost sed]# sed -n 'n,mp' 1.txt

显示第2行及以后3行 [root@localhost sed]# sed -n '2,+3p' 1.txt 显示第n行及以后m行 [root@localhost sed]# sed -n 'n,+mp' 1.txt

显示到第n行后退出 [root@localhost sed]# sed 'nq' 1.txt 显示到第4行后退出 [root@localhost sed]# sed '4q' 1.txt

3.删除

删除所有 [root@localhost sed]# sed 'd' 1.txt 删除第n行 [root@localhost sed]# sed 'nd' 1.txt 删除第n行到第m行 [root@localhost sed]# sed 'n,md' 1.txt 删除最后一行 [root@localhost sed]# sed '$d' 1.txt 删除空行 [root@localhost sed]# sed '/^$/d' 1.txt 删除以bash结尾的行 [root@localhost sed]# sed '/bash$/d' 1.txt 删除除了bash结尾的行 [root@localhost sed]# sed '/bash$/!d' 1.txt 从第一个位置打开行删除功能,到第二个位置关闭行删除功能 没有第二个位置 会从第一个位置删到结尾 [root@localhost sed]# sed '/2/,/3/d' 1.txt

4.替换

替换匹配到每行第一个root换成admin [root@localhost sed]# sed -n 's/root/admin/p' /etc/passwd 替换匹配到每行第二个root换成admin [root@localhost sed]# sed -n 's/root/admin/2p' /etc/passwd 替换匹配到所有root换成admin [root@localhost sed]# sed -n 's/root/admin/gp' /etc/passwd 删除匹配到所有root [root@localhost sed]# sed -n 's/root//gp' /etc/passwd 第1到20行 行首加# [root@localhost sed]# sed -n '1,20 s/^/#/' /etc/passwd 匹配到root开头的行尾加# [root@localhost sed]# sed -n '/^root/ s/$/#/' /etc/passwd sed调用res.sed文本中的命令对/etc/passwd文件进行操作 [root@localhost sed]# sed -f res.sed /etc/passwd 将/etc/passwd 1到20行内容输入到 abc.txt文件中 [root@localhost sed]# sed '1,20w abc.txt' /etc/passwd 将/etc/passwd 1到20行行首加上#并输入到 abc.txt文件中 [root@localhost sed]# sed '1,20w s/^/#/w abc.txt' /etc/passwd

5.插入

将匹配到45的行换成ABC [root@localhost sed]# sed '/45/c ABC' abc.txt 将45换成AB 前后替换的位数一样 [root@localhost sed]# sed '/45/ y/45/AB/' abc.txt 1到3行之下插入ABC [root@localhost sed]# sed '1,3a ABC' abc.txt 首行插入ABC [root@localhost sed]# sed '1i ABC' abc.txt 为行插入ABC [root@localhost sed]# sed '$a ABC' abc.txt 在1.txt文本第5行后插入/etc/resolv.conf内容 [root@localhost sed]# sed '5r /etc/resolv.conf' 1.txt 将包含root的行剪切到末尾,H表示复制到剪切板,G表示粘贴到指定行后 [root@localhost sed]# sed '/root/{H;d};$G' /etc/passwd 将1、2行复制到3和4行的下面 [root@localhost sed]# sed '1,2H;3,4G' /etc/passwd

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:awk命令
下一篇:5G N4接口开放 将会是5G服务垂直行业桥头堡
相关文章

 发表评论

暂时没有评论,来抢沙发吧~