shell编程 sed

sed


Stream EDitor:流编辑
sed 是一种在线的、非交互式的编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。

接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有改变,除非你使用重定向存储输出。Sed主要用来自动编辑一个或多个文件;简化对文件的反复操作;

  • sed格式主要分两种
1.	Sed  选项  命令  文件   sed [options] 'command' file(s)
2.	Sed  选项 –f 脚本 文件  sed [options] -f scriptfile file(s)

返回值都是0,只有当命令存在错误是。Sed退出状态是非0

  • Sed的正则表达式
    与grep一样,sed在文件中查找模式时也可以使用正则表达式(RE)和各种元字符。正则表达式是括在斜杠间的模式,用于查找和替换,以下是sed支持的元字符。
    基本元字符集 ^ , $ , . ,* ,[ ] , [^] , < > , () , {}
    扩展元字符 ? , + , | , () ,
    使用方式 + 转义 sed –r

命令汇总

  1. 删除命令:d
(1)Sed –r ‘/root/d’ passwd
匹配词组删除
[root@localhost ~]# sed -r '/root/d' passwd 
bin:x:1:1:bin:/bin:/sbin/nologin2
daemon:x:2:2:daemon:/sbin:/sbin/nologin3
adm:x:3:4:adm:/var/adm:/sbin/nologin4
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin5
sync:x:5:0:sync:/sbin:/bin/sync6
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown7
halt:x:7:0:halt:/sbin:/sbin/halt8
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin9
(2)sed –r ‘3d’ passwd 删除第三行
[root@localhost ~]# sed -r '3d' passwd 
root:x:0:0:root:/root:/bin/bash1
bin:x:1:1:bin:/bin:/sbin/nologin2
adm:x:3:4:adm:/var/adm:/sbin/nologin4
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin5
sync:x:5:0:sync:/sbin:/bin/sync6
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown7
halt:x:7:0:halt:/sbin:/sbin/halt8
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin9
operator:x:11:0:operator:/root:/sbin/nologin10
(3)sed –r ‘3{d}’ passwd  与上例一致
(4)sed –r ‘3{d;}’ passwd  大括号中可存sed多个命令 例3{h;d}  h 暂存空间
(5)sed –r ‘3,$d’ passwd  删除3到最后一行
删除3到最后一行
[root@localhost ~]# sed -r '3,$d' passwd 
root:x:0:0:root:/root:/bin/bash1
bin:x:1:1:bin:/bin:/sbin/nologin2
(6)sed –r ‘$d’ passwd  删除最后一行


  1. 替换命令:s
(1)Sed –r ‘s/root/aofa/’ passwd  把passwd文件中的root替换成aofa
(2)sed –r ‘s/^root/aofa/’ passwd 以root开始的词组,替换成aofa
(3)sed –r ‘s/root/aofa/g’ passwd 把所有的root全换成aofa
(4)sed –r ‘s/[0-9][0-9]$/&.5/’ passwd 
查找双数   结尾的词组&:替换成双数.5   &有查询结果的含义。
如果去掉$ 所有双数都会换掉
(5)sed –r ‘s/(mail)/E\1/g’ passwd  ()括号组合字符,\1调用括号
[root@localhost ~]# sed -r 's/(mail)/E\1/g' passwd 
Email:x:8:12:Email:/var/spool/Email:/sbin/nologin9
(6)  sed -r 's#(mail)#E\1#g' passwd  分隔符可以换成井号


  1. 读文件命令:r
    首先编辑1.txt 文件
(1)sed –r ‘$r 1.txt’  passwd
最后一行,读取新文件1.txt
(2)sed –r ‘/root/r 1.txt’ passwd
在root后面读取新文件

  1. 写文件命令:w(另存为)
(1)	sed –r ‘w 111.txt ’ 1.txt  把1.txt全部内容写入111.txt
(2)	sed –r ‘1,5w 123.txt’ passwd 把1,5行另存为123.txt
[root@localhost ~]# sed -r '1,5w 123.txt' passwd
root:x:0:0:root:/root:/bin/bash1
bin:x:1:1:bin:/bin:/sbin/nologin2
daemon:x:2:2:daemon:/sbin:/sbin/nologin3
adm:x:3:4:adm:/var/adm:/sbin/nologin4
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin5
sync:x:5:0:sync:/sbin:/bin/sync6
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown7
halt:x:7:0:halt:/sbin:/sbin/halt8
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin9
operator:x:11:0:operator:/root:/sbin/nologin10
[root@localhost ~]# cat -n 123.txt 
     1	root:x:0:0:root:/root:/bin/bash1
     2	bin:x:1:1:bin:/bin:/sbin/nologin2
     3	daemon:x:2:2:daemon:/sbin:/sbin/nologin3
     4	adm:x:3:4:adm:/var/adm:/sbin/nologin4
     5	lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin5 


  1. 追加命令:a(之后)
(1)	sed –r ‘a123’ passwd 每行后面,加上123行
(2)	sed –r ‘2a123’ passwd  2行后面,加上123行
(3)	sed –r ‘2a1111\  插入段落,要用\转义掉回车
2222\           分号结束
3333’ passwd

  1. 插入命令:i(之前)
(1)	sed –r ‘2iaaaa’ passd  在第二行插入新行aaaa
[root@localhost ~]# sed -r '2iaaaaaaaa' passwd 
root:x:0:0:root:/root:/bin/bash1
aaaaaaaa
bin:x:1:1:bin:/bin:/sbin/nologin2
daemon:x:2:2:daemon:/sbin:/sbin/nologin3
adm:x:3:4:adm:/var/adm:/sbin/nologin4
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin5
sync:x:5:0:sync:/sbin:/bin/sync6
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown7
halt:x:7:0:halt:/sbin:/sbin/halt8
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin9
operator:x:11:0:operator:/root:/sbin/nologin10
(2)	sed –r ‘2iaaaa\   插入段落与上面一致
bbbb\
ccccc’ passwd  

  1. 替换整行命令:c
(1)	sed –r ‘2caaaa’ passwd 把第二行替换成aaaa
(2)	sed –r ‘2c1111\  将一行替换成多行
2222\
3333’ passwd 

  1. 获取下一行命令:n
(1)	sed –r ‘/root/{n;d}’ passwd  n下一行的意思  找root行的下一行,删除
(2)	sed –r ‘/root/{n;s/bin/ding/g}’ passwd 找到root行的下一行查找替换

  1. 反向选择:!
(1)	sed –r ‘2,$d’ passwd 以上有
(2)	sed –r ‘2,$!d’ passwd 删除2行到最后一行以外的(第一行)

  1. 多重编辑:e
(1)	sed –r ‘1,3d’  –e ‘4s/adm/adnin/g’ passwd
(2)	sed –r ‘1,3d;4s/adm/admin/g’ passwd 与(1)一致
(3)	sed –r ‘2s/bin/ding/g;2s/nologin/bash/’ passwd
(4)	sed –r ‘2{s/bin/ding/g;s/nologin/bash/}’ passwd  括号省了范围

删除配置文件中#号的注释行
Sed –r ‘/^#/d’  /etc/yum.conf
修改文件
Sed –ri$a\cheoot_local_user=YES’ /etc/yum.conf  z在最后一行追加
Sed –r ‘/^SELINUX=/Cselinux=disabled’ /etc/selinux/config  换行c
给文件行添加注释
Sed –r ‘2,6s/^/#/’ a.txt   2到6行 换成#
Sed –r ‘2.6s/(.*)/#\1/’ a.txt  ()内容可以被\1引用
Sed –r ‘2,6s/.*/#&/’ a.txt  &匹配前面查找的内容
外部变量
创建var1=1111
追加变量
Sed –r “1a$var1/etc/hosts
第一行后追加变量$var1
[root@localhost ~]# sed -r  "1a$var1" /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
111111
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
调用变量 ,使用单引号是错误的



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值