Linux三剑客sed
注意sed和awk使用单引号,双引号有特殊解释
sed是Stream Editor(字符流编辑器)的缩写,简称流编辑器。
sed是操作、过滤和转换文本内容的强大工具。
常用功能包括结合正则表达式对文件实现快速增删改查,其中查询的功能中最常用的两大功能是过滤(过滤指定字符串)、取行(取出指定行)。
语法:
sed [选项] [sed内置命令字符] [输入文件]
选项:
参数选项 | 解释 |
---|---|
-n | 取消默认sed的输出,常与sed内置命令p一起用 |
-i | 直接将修改结果写入文件,不用-i,sed修改的是内存数据 |
-e | 多次编辑,不需要管道符了 |
-r | 支持正则扩展 |
sed的内置命令字符
用于对文件进行不同的操作功能,如对文件增删改查
sed常用内置命令字符
:
sed的内置命令字符 | 解释 |
---|---|
a | append,对文本追加,在指定行后面添加一行/多行文本 |
d | Delete,删除匹配行 |
i | insert,表示插入文本,在指定行前添加一行/多行文本 |
p | Print ,打印匹配行的内容,通常p与-n一起用 |
s/正则/替换内容/g | 匹配正则内容,然后替换内容(支持正则),结尾g代表全局匹配 |
sed匹配范围
范围 | 解释 |
---|---|
空地址 | 全文处理 |
单地址 | 指定文件某一行 |
/pattern/ |
被模式匹配到的每一行 |
范围区间 | 10,20 十到二十行 ,10,+5第10行向下5行 ,/pattern1/,/pattern2/ |
步长 | 1~2,表示1、3、5、7、9行 ,2~2两个步长,表示2、4、6、8、10、偶数行 |
sed案例
准备测试数据
[root@pylinux data]# cat -n luffycity.txt
1 My name is chaoge.
2 I teach linux.
3 I like play computer game.
4 My qq is 877348180.
5 My website is http://pythonav.cn.
1.输出文件第2,3行的内容
[root@pylinux data]# sed -n '2,3p' luffycity.txt
I teach linux.
I like play computer game.
2.过滤出含有linux的字符串行
#sed可以实现grep的过滤效果,必须吧要过滤的内容放在双斜杠中
[root@pylinux data]# sed -n '/linux/p' luffycity.txt
I teach linux.
3.删除含有game的行
注意sed想要修改文件内容,还得用-i参数
[root@pylinux data]# sed '/game/d' luffycity.txt
My name is chaoge.
I teach linux.
My qq is 877348180.
My website is http://pythonav.cn.
想要将修改结果写入到文件,还得这么敲
[root@pylinux data]# sed -i '/game/d' luffycity.txt #不会输出结果,直接写入文件
删掉2,3两行
[root@pylinux data]# sed '2,3d' luffycity.txt
删除第5行到结尾
[root@pylinux data]# sed '5,$d' luffycity.txt
My name is chaoge.
----------
I teach linux.
----------
4.将文件中的My全部替换为His
- s内置符配合g,代表全局替换,中间的"/"可以替换为"#@/"等
[root@pylinux data]# sed 's/My/His/g' luffycity.txt
His name is chaoge.
I teach linux.
I like play computer game.
His qq is 877348180.
His website is http://pythonav.cn.
5.替换所有My为His,同时换掉QQ号为8888888
[root@pylinux data]# sed -e 's/My/His/g' -e 's/877348180/88888/g' luffycity.txt
His name is chaoge.
I teach linux.
I like play computer game.
His qq is 88888.
His website is http://pythonav.cn.
6.在文件第二行追加内容 a字符功能,写入到文件,还得添加 -i
[root@pylinux data]# sed -i '2a I am useing sed command' luffycity.txt
My name is chaoge.
I teach linux.
I am useing sed command
I like play computer game.
My qq is 877348180.
My website is http://pythonav.cn.
添加多行信息,用换行符"\n"
[root@pylinux data]# sed -i "3a i like linux very much.\nand you?" luffycity.txt
[root@pylinux data]#
[root@pylinux data]# cat -n luffycity.txt
1 My name is chaoge.
2 I teach linux.
3 I am useing sed command
4 i like linux very much.
5 and you?
6 I like play computer game.
7 My qq is 877348180.
8 My website is http://pythonav.cn.
在每一行下面插入新内容
[root@pylinux data]# sed "a ----------" luffycity.txt
My name is chaoge.
----------
I teach linux.
----------
I am useing sed command
----------
i like linux very much.
----------
and you?
----------
I like play computer game.
----------
My qq is 877348180.
----------
My website is http://pythonav.cn.
----------
7.在第二行上面插入内容
[root@pylinux data]# sed '2i i am 27' luffycity.txt
My name is chaoge.
i am 27
----------
I teach linux.
----------
I am useing sed command
----------
i like linux very much.
----------
and you?
----------
I like play computer game.
----------
My qq is 877348180.
----------
My website is http://pythonav.cn.
----------
sed配合正则表达式企业案例
上一节是用grep -E 扩展正则表达式,这一节是用sed配合正则表达式使用
取出linux的IP地址
1.删除网卡信息
去头去尾法
交给管道符,一次去头,一次去尾
思路:
1.首先取出第二行
[root@pylinux ~]# ifconfig | sed -n '2p'
inet 10.141.32.137 netmask 255.255.192.0 broadcast 10.141.63.255
2.找到第二行后,去掉ip之前的内容
[root@pylinux ~]# ifconfig eth0|sed -n '2s#^.*inet##gp'
10.141.32.137 netmask 255.255.192.0 broadcast 10.141.63.255
解释:
-n是取消默认输出
2s是处理第二行内容
#^.*inet## 是匹配inet前所有的内容
gp代表全局替换且打印替换结果
3.再次处理,去掉ip后面的内容
[root@pylinux tmp]# sed -n '2s/^.*inet//gp' ip.txt | sed -n 's/net.*$//gp'
10.141.32.137
解释:
net.*$ 匹配net到结尾的内容
s/net.*$//gp #把匹配到的内容替换为空
-e参数多次编辑
[root@pylinux tmp]# ifconfig eth0 | sed -ne '2s/^.*inet//g' -e '2s/net.*$//gp'
10.141.32.137
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!