第七节 流编辑器sed(stream editor)(7.2)

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

3,1,地址定界
地址定界 示例 说明
不写地址定界 表示对文件所有行进行处理
num1,num2 1,3或者1,$ 对文件的1-3行进行处理或者1-$(表示文件的最后一行)
num1,+N 1,+3 对文件的num1行和之后n行进行处理
first~step 1~2 对文件的1,3,5,7,...的行内容进行处理
/pattern/ /^root/,/r/l 对任何能够被正则表达式匹配的行进行处理
%pattern% %/r% 可以使用其他的边界符号(例如#),对任何能够被正则表达式匹配的行处理
/pattern1/,/pattern2/ /^root/,/^adm/ 表示正则表达式1和正则表达式2匹配的行和中间的所有行
0,/pattern1/或者1,/pattern1/ 0,/^adm/ 从第一行开始到能够被正则表达式匹配的行

示例:

生成测试文件

bash 复制代码
head -n 5 /etc/passed > testfile

a)替换文件中所有:为@@@

bash 复制代码
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

b)替换1-3行

bash 复制代码
sed '1,3s/:/@@@/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

c)替换1行和3行的":"

shell 复制代码
sed -e '1s/:/@@@/g' -e '3s/:/@/g' testfile
root@@@x@@@0@@@0@@@root@@@/root@@@/bin/bash
bin: x: 1:1: bin:/bin:/sbin/nologin
daemon@x@2@2@daemon@/sbin@/sbinnologin
admx: 3:4: adm:/var/adm:/sbin/nologin
lp: x: 4:7: lp:/var/spool/lpd:/sbin/nologin

d)替换2行和之后两行":"

shell 复制代码
sed -e '2,+2s/:/@@@/g' -e '3s/:/@/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

e)每隔1行替换

shell 复制代码
sed -e '2~3s/:/@@@/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

f)带sbin字符忽略大小写的行替换

shell 复制代码
sed -e '/SBIN/IS/:/@@@/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@@@3@@@4@@@adm@@@/var/adm@@@/sbin/nologin
lp@@@x@@@4@@@7@@@lp@@@/var/spool/lpd@@@/sbin/nologin

g)daemon和lp字符之间的行替换

shell 复制代码
sed -e '/daemon/,/lp/s/:/@@@/g' testfile
root: x: 0:0: root:/root:/bin/bash
bin: x: 1:1: bin:/sbin/nologin
daemon@@@x@@@2@@@daemon@@@/sbin@@@/sbin@@@/sbin/nologin
adm@@@x@@@3@@@4@@@7@@@lp@@@/var/spool/lpd@@@/sbin/nologin
lp@@@x@@@4@@@7@@@lp@@@/var/spool.lpd@@@/sbin/nologin

h)第一行到adm之间的

shell 复制代码
sed -e '1, adm/s/:/@@@/g' testfile
root@@@x@@@0@@@0@@@root@@@/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

i)adm到最后一行

shell 复制代码
sed -e '/asm/,$?S/:/@@@/g' testfile
root: x: x0:0: root:/root:/bin/bash
bin: x: 1:1: bin:/bin:/sbin/nologin
daemon: x: 2:2: daemon:/sbin:/sbin/no1ogin 
adm@@@x@@@3@@@4@@@adm@@@/var/adm@@@/sbin/no1ogin 
lp@@@x@@@4@@@7@@@lp@@@/var/spool/lpd@@@/sbin/nologin

j)其他sed分隔符的指定

shell 复制代码
sed -e '\%adm%,$s%:%@@@%/g' testfile
sed -e '\#adm#,$s#:#@@@#g' testfile
相关推荐
缘来如此҉3 分钟前
Mysql数据库——增删改查CRUD
数据库·mysql·oracle
apihz25 分钟前
域名WHOIS信息查询免费API使用指南
android·开发语言·数据库·网络协议·tcp/ip
gwcgwcjava31 分钟前
[时序数据库-iotdb]时序数据库iotdb的安装部署
数据库·时序数据库·iotdb
SHUIPING_YANG1 小时前
根据用户id自动切换表查询
java·服务器·数据库
爱吃烤鸡翅的酸菜鱼1 小时前
IDEA高效开发:Database Navigator插件安装与核心使用指南
java·开发语言·数据库·编辑器·intellij-idea·database
超奇电子1 小时前
阿里云OSS预签名URL上传与临时凭证上传的技术对比分析
数据库·阿里云·云计算
modelmd1 小时前
mysql not in 查询引发的bug问题记录
sql·mysql
神仙别闹1 小时前
基于C#+SQL Server实现(Web)学生选课管理系统
前端·数据库·c#
m0_653031362 小时前
PostgreSQL技术大讲堂 - 第97讲:PG数据库编码和区域(locale)答疑解惑
数据库·postgresql
会编程的林俊杰2 小时前
MySQL中的锁有哪些
数据库·mysql