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
​
相关推荐
YC运维4 小时前
Dockerfile实战案例详解
运维·docker·容器
一个响当当的名号4 小时前
一些主要应用和NAT
运维·服务器·网络
@小博的博客4 小时前
【Linux探索学习】第二篇Linux的基本指令(2)——开启Linux学习第二篇
linux·运维·学习
openHiTLS密码开源社区6 小时前
【密码学实战】openHiTLS passwd命令行:专业密码哈希生成工具
linux·密码学·哈希算法·ldap·密码策略·随机盐值
筵陌6 小时前
深入理解 Reactor 反应堆模式:高性能网络编程的核心
服务器
WTCLLB6 小时前
netgear r6220 路由器,刷openwrt后,系统备份还原
linux·网络·智能路由器·openwrt
迎風吹頭髮7 小时前
UNIX下C语言编程与实践38-UNIX 信号操作:signal 函数与信号捕获函数的编写
linux·c语言·unix
做运维的阿瑞8 小时前
Linux系统性能监控与故障定位实战:CPU/内存/I/O/网络
linux·运维·网络
驱动探索者8 小时前
车库到双子星:惠普的百年科技传奇
linux
阿沁QWQ8 小时前
MySQL服务器配置与管理
服务器·数据库·mysql