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
​
相关推荐
落寞书生7 分钟前
docker安装mysql 实现主从同步
运维·mysql·docker·主从同步·docker 安装mysql
智慧源点1 小时前
阿里云负载均衡SLB实践
服务器·阿里云·负载均衡
人类群星闪耀时1 小时前
机器学习在自动化运维中的应用:提升运维效率的新利器
运维·机器学习·自动化
开源Linux1 小时前
电脑硬件检测工具AIDA64 v7.50免激活绿色版
服务器
黑客呀2 小时前
网络安全——防火墙
服务器·网络·php
明金同学2 小时前
腾讯云海外服务器Window切换为linux系统(从Window DD 到 Linux)
linux·服务器·腾讯云
CC大煊3 小时前
【Linux】vi/vim 使用技巧
linux·运维·vim
weixin_399380693 小时前
Tongweb7049M4有关SSL/TLS 服务器瞬时 Diffie-Hellman 公共密钥过弱的处理方案(by lqw)
服务器·网络协议·ssl
是十一月末4 小时前
Linux的基本功能和命令
linux·服务器·开发语言·数据库
聚名网4 小时前
什么叫中间件服务器?
运维·服务器·中间件