Linux三剑客之sed
参考:https://www.cnblogs.com/ftl1012/p/9250171.html
https://www.runoob.com/linux/linux-comm-sed.html
sed是一种流编编器,它是文本处理中非常中的工具,能够完美的配合正则表达式便用,功物能不同凡响。
处理时,把当前处理的行存储在临时缓冲区中,称为”模式空间”( oattern space),接看用sed命令处理缓冲区中的内容,处理成后,把缓冲区的内容送往屏幕显示。
接着理下一行,这样不断重复,直到文件末。文件内容没有改改变,除非使用了写入的命令,将内容更新。
定址用于决定对哪些行进行编辑。地址的形式可以是数字、正则表达式、或二者的结合。如果没有指定地址,sed将处理输入文件的所有行。
sed功能命令
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | 命令 功能 a\ 在当前行后添加一行或多行。多行时除最后一行外,每行末尾需用“\”续行 c\ 用此符号后的新文本替换当前行中的文本。多行时除最后一行外,每行末尾需用"\"续行 i\ 在当前行之前插入文本。多行时除最后一行外,每行末尾需用"\"续行 d 删除行 h 把模式空间里的内容复制到暂存缓冲区 H 把模式空间里的内容追加到暂存缓冲区 g 把暂存缓冲区里的内容复制到模式空间,覆盖原有的内容 G 把暂存缓冲区的内容追加到模式空间里,追加在原有内容的后面 l 列出非打印字符 p 打印行 n 读入下一输入行,并从下一条命令而不是第一条命令开始对其的处理 q 结束或退出 sed r 从文件中读取输入行 ! 对所选行以外的所有行应用命令 s 用一个字符串替换另一个 g 在行内进行全局替换 w 将所选的行写入文件 x 交换暂存缓冲区与模式空间的内容 y 将字符替换为另一字符(不能对正则表达式使用y命令) |
sed常见命令参数
1 2 3 4 5 6 7 | p==print d:delete =:打印匹配行的行号 -n 取消默认的完整输出,只要需要的 -e 允许多项编辑 -i 修改文件内容 -r 不需要转义 |
演示使用文件/etc/passwd
只查看文件的第3行
1 2 | # sed -n '3p' passwd bin:x:2:2:bin: /bin : /usr/sbin/nologin |
PS:需要加参数-n如果不加会在屏幕输出文件所有内容
只查看第3行到9行
1 2 3 4 5 | # sed -n '3,6p' passwd bin:x:2:2:bin: /bin : /usr/sbin/nologin sys:x:3:3:sys: /dev : /usr/sbin/nologin sync :x:4:65534: sync : /bin : /bin/sync games:x:5:60:games: /usr/games : /usr/sbin/nologin |
打印最后一行
1 2 | #sed -n '$p' passwd xrdp:x:126:131:: /var/run/xrdp : /usr/sbin/nologin |
过滤指定字符串,显示正行内容,例如过滤出root
1 2 | # sed -n "/root/p" passwd root:x:0:0:root: /root : /bin/bash |
PS:过滤字符串使用//包含p代表打印输出
仅显示被匹配字符串的行号
1 2 | #sed -n '/root/=' passwd 1 |
打印匹配的内容和行号,相当于又根据关键词查询了一次
1 2 3 | sed -n -e '/root/p' -e '/root/=' passwd root:x:0:0:root: /root : /bin/bash 1 |
PS:-e允许多项编辑
在文件的某行后增加一行
1 | #sed 4a\newline passwd |
会在第4行新增一行后再输出所有
如果使用参数-n则只在屏幕输出增加的行newline
删除行
1 | #sed '1,10d' passwd |
删除1至10行把剩下的行输出至屏幕
数据搜索并删除
删除包含root的行
1 | #sed '/root/d' passwd |
数据的搜索并替换
格式如下
1 | sed 's/要被替换的字符串/新的字符串/g' |
把root字符串替换成admin
1 | sed 's/root/admin/g' passwd |
文件的修改
加参数 -i直接修改文件(危险操作慎用)
把root替换成admin并且直接修改文件,直接修改屏幕无输出
1 | sed 's/root/admin/g' passwd -i |
如果只是需要替换某一行的在s前面加行号例如
把第1行的root替换成admin,如果其他行包含root则不会替换
1 | sed '1s/root/admin/g' passwd -i |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
2018-09-10 怎么关闭win10防火墙