sed流编辑器

一、sed简介

sed是一种流编辑器,处理时,把当前处理的行存储在临时缓冲区中,称为模式空间,接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容没有改变。

二、sed的语法

bash 复制代码
sed OPTIONS... [SCRIPT] [INPUTFILE...]

-n : 输出经过处理的行

-i : 直接编辑原文件,而不是有屏幕输出,默认对原文件不进行操作

-e : 使用多个子命令

-r : 使用扩展正则表达式

-f : 直接将sed的动作写在一个文件内,-f filename 则可以执行filename内的sed动作。

三、模式空间中的编辑操作

1、地址定界

bash 复制代码
[root@long file]# head -n 5 /etc/passwd  > testfile
[root@long file]# cat testfile
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
[root@long file]#
[root@long file]#
[root@long file]# sed 's/:/@@@/g' testfile     # 替换文件中所有:为@@@
root@@@x@@@0@@@0@@@root@@@/root@@@/bin/bash
bin@@@x@@@1@@@1@@@bin@@@/bin@@@/sbin/nologin
daemon@@@x@@@2@@@2@@@daemon@@@/sbin@@@/sbin/nologin
adm@@@x@@@3@@@4@@@adm@@@/var/adm@@@/sbin/nologin
lp@@@x@@@4@@@7@@@lp@@@/var/spool/lpd@@@/sbin/nologin
[root@long file]#
[root@long file]# sed '1,3s/:/@@@/g' testfile   # 替换1-3行
root@@@x@@@0@@@0@@@root@@@/root@@@/bin/bash
bin@@@x@@@1@@@1@@@bin@@@/bin@@@/sbin/nologin
daemon@@@x@@@2@@@2@@@daemon@@@/sbin@@@/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
[root@long file]# sed -e '1s/:/@/g' -e '3s/:/@/g' testfile         # 替换1行和3行的
root@x@0@0@root@/root@/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon@x@2@2@daemon@/sbin@/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
[root@long file]# sed '2,+2s/:/@/g' testfile           # 替换2行及其后两行
root:x:0:0:root:/root:/bin/bash
bin@x@1@1@bin@/bin@/sbin/nologin
daemon@x@2@2@daemon@/sbin@/sbin/nologin
adm@x@3@4@adm@/var/adm@/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
[root@long file]# sed '2~2s/:/@/g' testfile          # 每隔1行替换
root:x:0:0:root:/root:/bin/bash
bin@x@1@1@bin@/bin@/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm@x@3@4@adm@/var/adm@/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
[root@long file]#
​
[root@long file]# sed '/SBIN/Is/:/@/g' testfile   # 带sbin字符忽略大小写的行替换
root:x:0:0:root:/root:/bin/bash 
bin@x@1@1@bin@/bin@/sbin/nologin
daemon@x@2@2@daemon@/sbin@/sbin/nologin
adm@x@3@4@adm@/var/adm@/sbin/nologin
lp@x@4@7@lp@/var/spool/lpd@/sbin/nologin
[root@long file]# sed '/daemon/,/lp/s/:/@/g' testfile   # daemon和lp字符之间的行替换
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon@x@2@2@daemon@/sbin@/sbin/nologin
adm@x@3@4@adm@/var/adm@/sbin/nologin
lp@x@4@7@lp@/var/spool/lpd@/sbin/nologin
[root@long file]# sed -e '1,/admin/s/:/@@/g' testfile    # 第一行到adm之间的
root@@x@@0@@0@@root@@/root@@/bin/bash
bin@@x@@1@@1@@bin@@/bin@@/sbin/nologin
daemon@@x@@2@@2@@daemon@@/sbin@@/sbin/nologin
adm@@x@@3@@4@@adm@@/var/adm@@/sbin/nologin
lp@@x@@4@@7@@lp@@/var/spool/lpd@@/sbin/nologin
[root@long file]# sed -e   '/adm/,$s/:/@@/g' testfile   # adm到最后一行的
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm@@x@@3@@4@@adm@@/var/adm@@/sbin/nologin
lp@@x@@4@@7@@lp@@/var/spool/lpd@@/sbin/nologin
[root@long file]# sed -e   '\%adm%,$s%:%@@%g' testfile     # 其他sed分隔符的指定
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm@@x@@3@@4@@adm@@/var/adm@@/sbin/nologin
lp@@x@@4@@7@@lp@@/var/spool/lpd@@/sbin/nologin

2、常用编辑命令

bash 复制代码
[root@long file]# head -n 5 /etc/passwd  > testfile
[root@long file]# cat testfile
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
[root@long file]#
[root@long file]#
[root@long file]# sed 's/:/@@@/g' testfile     # 替换文件中所有:为@@@
root@@@x@@@0@@@0@@@root@@@/root@@@/bin/bash
bin@@@x@@@1@@@1@@@bin@@@/bin@@@/sbin/nologin
daemon@@@x@@@2@@@2@@@daemon@@@/sbin@@@/sbin/nologin
adm@@@x@@@3@@@4@@@adm@@@/var/adm@@@/sbin/nologin
lp@@@x@@@4@@@7@@@lp@@@/var/spool/lpd@@@/sbin/nologin
[root@long file]#
[root@long file]# sed '1,3s/:/@@@/g' testfile   # 替换1-3行
root@@@x@@@0@@@0@@@root@@@/root@@@/bin/bash
bin@@@x@@@1@@@1@@@bin@@@/bin@@@/sbin/nologin
daemon@@@x@@@2@@@2@@@daemon@@@/sbin@@@/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
[root@long file]# sed -e '1s/:/@/g' -e '3s/:/@/g' testfile         # 替换1行和3行的
root@x@0@0@root@/root@/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon@x@2@2@daemon@/sbin@/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
[root@long file]# sed '2,+2s/:/@/g' testfile           # 替换2行及其后两行
root:x:0:0:root:/root:/bin/bash
bin@x@1@1@bin@/bin@/sbin/nologin
daemon@x@2@2@daemon@/sbin@/sbin/nologin
adm@x@3@4@adm@/var/adm@/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
[root@long file]# sed '2~2s/:/@/g' testfile          # 每隔1行替换
root:x:0:0:root:/root:/bin/bash
bin@x@1@1@bin@/bin@/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm@x@3@4@adm@/var/adm@/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
[root@long file]#
​
[root@long file]# sed '/SBIN/Is/:/@/g' testfile   # 带sbin字符忽略大小写的行替换
root:x:0:0:root:/root:/bin/bash 
bin@x@1@1@bin@/bin@/sbin/nologin
daemon@x@2@2@daemon@/sbin@/sbin/nologin
adm@x@3@4@adm@/var/adm@/sbin/nologin
lp@x@4@7@lp@/var/spool/lpd@/sbin/nologin
[root@long file]# sed '/daemon/,/lp/s/:/@/g' testfile   # daemon和lp字符之间的行替换
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon@x@2@2@daemon@/sbin@/sbin/nologin
adm@x@3@4@adm@/var/adm@/sbin/nologin
lp@x@4@7@lp@/var/spool/lpd@/sbin/nologin
[root@long file]# sed -e '1,/admin/s/:/@@/g' testfile    # 第一行到adm之间的
root@@x@@0@@0@@root@@/root@@/bin/bash
bin@@x@@1@@1@@bin@@/bin@@/sbin/nologin
daemon@@x@@2@@2@@daemon@@/sbin@@/sbin/nologin
adm@@x@@3@@4@@adm@@/var/adm@@/sbin/nologin
lp@@x@@4@@7@@lp@@/var/spool/lpd@@/sbin/nologin
[root@long file]# sed -e   '/adm/,$s/:/@@/g' testfile   # adm到最后一行的
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm@@x@@3@@4@@adm@@/var/adm@@/sbin/nologin
lp@@x@@4@@7@@lp@@/var/spool/lpd@@/sbin/nologin
[root@long file]# sed -e   '\%adm%,$s%:%@@%g' testfile     # 其他sed分隔符的指定
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm@@x@@3@@4@@adm@@/var/adm@@/sbin/nologin
lp@@x@@4@@7@@lp@@/var/spool/lpd@@/sbin/nologin

3、特殊符号的使用

bash 复制代码
[root@long file]# sed -n '/root/!p' testfile            # !
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
[root@long file]# sed  '=' testfile                      # = 行号
1
root:x:0:0:root:/root:/bin/bash
2
bin:x:1:1:bin:/bin:/sbin/nologin
3
daemon:x:2:2:daemon:/sbin:/sbin/nologin
4
adm:x:3:4:adm:/var/adm:/sbin/nologin
5
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
[root@long file]# sed  '1~2s/:/#/g' testfile            # ~步长
root#x#0#0#root#/root#/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon#x#2#2#daemon#/sbin#/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp#x#4#7#lp#/var/spool/lpd#/sbin/nologin
[root@long file]# sed  's/:/^&^/g' testfile          # &代表匹配到的
root^:^x^:^0^:^0^:^root^:^/root^:^/bin/bash
bin^:^x^:^1^:^1^:^bin^:^/bin^:^/sbin/nologin
daemon^:^x^:^2^:^2^:^daemon^:^/sbin^:^/sbin/nologin
adm^:^x^:^3^:^4^:^adm^:^/var/adm^:^/sbin/nologin
lp^:^x^:^4^:^7^:^lp^:^/var/spool/lpd^:^/sbin/nologin
[root@long file]# sed -n '1p;4p' testfile               # 多条命令
root:x:0:0:root:/root:/bin/bash
adm:x:3:4:adm:/var/adm:/sbin/nologin
[root@long file]# sed -n '1,3{p;=} ' testfile
root:x:0:0:root:/root:/bin/bash
1
bin:x:1:1:bin:/bin:/sbin/nologin
2
daemon:x:2:2:daemon:/sbin:/sbin/nologin
3
​
相关推荐
0xDevNull3 小时前
Linux切换JDK版本详细教程
linux
进击的丸子3 小时前
虹软人脸服务器版SDK(Linux/ARM Pro)多线程调用及性能优化
linux·数据库·后端
茶杯梦轩3 小时前
从零起步学习RabbitMQ || 第二章:RabbitMQ 深入理解概念 Producer、Consumer、Exchange、Queue 与企业实战案例
服务器·后端·消息队列
甲鱼9291 天前
MySQL 实战手记:日志管理与主从复制搭建全指南
运维
Johny_Zhao2 天前
OpenClaw安装部署教程
linux·人工智能·ai·云计算·系统运维·openclaw
YuMiao2 天前
gstatic连接问题导致Google Gemini / Studio页面乱码或图标缺失问题
服务器·网络协议
chlk1233 天前
Linux文件权限完全图解:读懂 ls -l 和 chmod 755 背后的秘密
linux·操作系统
舒一笑3 天前
Ubuntu系统安装CodeX出现问题
linux·后端
改一下配置文件3 天前
Ubuntu24.04安装NVIDIA驱动完整指南(含Secure Boot解决方案)
linux
碳基沙盒3 天前
OpenClaw 多 Agent 配置实战指南
运维