linux之sed命令

本文深入解析Linux下的sed流编辑器,涵盖其工作原理、缓冲区机制、常用语法与选项,以及编辑命令的应用。通过实例演示如何基于行号和模式进行文本查找、修改与添加,适用于Linux系统管理和文本处理的学习者。

定义

是一种支持正则表达式的非交互式流编辑器

工作原理

缓冲区

sed中的两个空间:pattern space和hold space。
两者都在保存在内存中。

pattern space是模式空间:
用来进行模式匹配,相当于一个加工车间,其作用是根据模式去处理数据,处理完成之后会向屏幕或者是文件输出。处理完一行数据之后,第二行数据进入pattern空间的时候就会清空模式空间里面原来一行的内容,模式空间里面的数据不会长期保留。

hold space是保留空间:
是临时存放数据的地方。一般不常用到。不会自动清除,也不会主动将其中的内容输出,必须通过pattern space空间才能将其中的内容输出

pattern space和hold space空间的互相转换:
在这里插入图片描述
sed的一般工作模式,pattern space每次从待处理的数据中取出一行数据,放入到pattern space中,然后进行处理,如果不做别的操作,该行语句还存放在pattern space空间中,直到pattern sapce空间读入第二行数据,从而就取代了原来的第一行数据。

hold space是另一个缓冲区,只能和pattern space空间进行数据的交互,不能和终端进行交互,若想对hold space空间的数据进行输出,则必须要将其放在pattern space空间。

命令:

h/H:将数据从pattern space以覆盖/追加的方式到hold space空间
g/G:将数据从hold space以覆盖/追加的方式到pattern space空间
x:将hold space空间的内容和pattern space空间的数据互换
n:读取下一行待处理数据内容,替换当前pattern space空间的内容,该选项下,模式空间始终只有1行
N:读入下一行待处理数据内容,追加到pattern sapce空间的后面,该选项下,模式空间会有多行。

语法

常用语法1:

sed [选项] sed编辑命令 输入文件

常用语法2:

shell 命令 | sed [选项] sed编辑命令

常用选项

  1. -n:只显示匹配的行
[root@localhost check]# sed -n '/root/p' /etc/passwd

在这里插入图片描述
2. -i:直接在文件里面修改,并且不会在屏幕输出
3. -r(regexp)/-E:支持扩展正则表达式
4. -f:从脚本文件中读取内容并执行
5. -e:执行多个编辑命令。

编辑命令

p:打印匹配行,print
d:删除指定行,delete
a:在匹配行后面追加,append
i:在匹配行前面插入,insert
c:整行替换
r:读入文件内容
w:导出文本内容
s:substitute,替换匹配的内容

作用

其工作方式可以基于行号,也可以基于模式查询。

文本查找

基于行号查找

1.显示文本的第10行和最后一行的内容
在这里插入图片描述


[root@localhost check]# sed  -n '3,5p' /etc/passwd  ###显示3-5行内容
[root@localhost check]# sed  -n '3,+5p' /etc/passwd   ##显示第3行及之后的5行内容
[root@localhost check]# sed  -n '3,$!p' /etc/passwd   ##显示1-2行
[root@localhost check]# sed  -n '14,$p' /etc/passwd  ##显示14行开始,一直到最后一行的内容
[root@localhost check]# cat -n /etc/passwd |sed  -n '2~2p'    #取偶数行的内容,~后面的是步长

基于模式查找

[root@localhost ~]# sed -n '/bash/p' /etc/passwd    ##查找含有bash的行
[root@localhost etc]# sed -n '/^$\|^#/!p'  /etc/grub2.cfg  ##匹配不是以#开头,且不是空行的内容
[root@localhost check]# cat -n /etc/passwd|sed -n -r  "/.*feng.*bash.*/p"    ##查找/etc/passwd中既包含feng又包含bash的内容

在这里插入图片描述

文本修改(整行)

文本修改整行:在这里插入图片描述

文本替换(指定内容)

文本替换某个内容:
在这里插入图片描述

文本添加

文本增加
在h.txt文件中的第1行后追加huagnxinyi 123的内容

[root@localhost ~]# cat h.txt |sed -i '1a huangxinyi 123' h.txt 
[root@localhost ~]# cat h.txt |sed -i '/huangxinyi 123/a guozhiyue' h.txt 

引用shell的外部变量

用双引号:

[root@localhost check]# a=5
[root@localhost check]# b=10
[root@localhost check]# cat -n /etc/passwd|sed -n "${a},${b}p" 

在这里插入图片描述

“&”符号

&符号代表前面查找的内容

[root@localhost lianxi]# echo "i have a fat cat"|sed 's/.at/"&"/g'

在这里插入图片描述

标签使用

用圆括号定义替换模式中的部分字符,每条指令最多使用9个标签
在这里插入图片描述

例子

复制/etc/host文件到当前目录下,并在每行前面加一个字符串sanchuang

[root@localhost lianxi]# sed -i '/^/ s//sanchuang/g ' hosts

在这里插入图片描述

2.自己编辑一个文件test.txt,内容如下:
0.0.0.0
1.1.1.1
2.2.2.2
输出以下形式:
0.0.0.0:80,1.1.1.1:80,2.2.2.2:80
在这里插入图片描述
3.将文件倒序输出
[root@localhost lianxi]# sed ‘1!G;h;$!d’ a.txt
a.txt中的内容:
first
second
third
在这里插入图片描述

sed高级用法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值