云计算:shell 编程-SED

sed:stream editor(流编辑器)的缩写是一种在线非交互式编辑器,它一次处理一行内容。这样不断重复,直到文件末尾。

Sed主要用来自动编辑一个或多个文件;简化对文件的反复操作;编写转换程序等

非交互式编辑器,一次处理一行内容。

 支持正则表达式
     与grep一样,sed在文件中查找模式时也可以使用正则表达式(RE)和各种元字符,用于查找和替换,以下是sed支持的元字符:
 使用基本元字符集    ^, $, ., *, [], [^], \< \>,\(\)
 使用扩展元字符集    ?, +, { }, |, ( )
 sed   -r
 #在实际使用的时候,都会加上 -r 参数,即使没有用的扩展正则也不会有任何影响。

sed基本用法

打印

sed 默认会输出文件的每一行,无论这行内容是否能匹配上匹配模式。
 # sed   -r   ''     file_name

搜索替换

sed会自动打印文件的每一行,同时查找模式匹配的行,找到后执行后面的命令,默认是 p 打印(不加 -n 的情况下)

 示例文件
 [root@localhost ~]# vim test.txt
 MA Daggett, 341 King Road, Plymouth MA
 Alice Ford, 22 East Broadway, Richmond VA 
 MA Thomas, 11345 Oak Bridge Road, Tulsa OK 
 Terry Kalkas, 402 Ma Road, mA Falls PA 
 Eric Adams, 20 Post Road, Sudbury mA
 Hubert Sims, 328A Brook Road, Roanoke VA
 Amy Wilde, 334 Ma Pkwy, Mountain View CA 
 Sal Carpenter, 73 MA Street, Boston MA
 ​
 1.搜索每一行匹配到MA的将第一个替换为Massachusetts:
 [root@localhost ~]# sed -r 's/MA/Massachusetts/' test.txt
 s:----查找
 ​
 2.搜索每一行,找到所有的MA字符,进行全局替换为Massachusetts
 [root@localhost ~]# sed -r 's/MA/Massachusetts/g' test.txt
 ​
 3.搜索每一行,找到所有的MA字符,进行全局替换为Massachusetts同时忽略大小写
 [root@localhost ~]# sed -r 's/MA/Massachusetts/gi' test.txt
 ​
 4.-n   #静默输出(不打印默认输出)
 [root@localhost ~]# sed  -r -n 's/MA/Massachusetts/' test.txt
 ​
 ​
 案例:
 [root@localhost ~]# sed -r 's/SELINUX=disabled/SELINUX=enabled/' /etc/sysconfig/selinux

多重编辑选项

 1.使用多重指令:-e  给予sed多个命令的时候需要-e选项
 [root@localhost ~]# sed -r -e 's/MA/Massachusetts/' -e 's/PA/Pennsylvania/' test.txt
 ​
 2.使用脚本文件:当有多个要编辑的项目时,可以将编辑命令放进一个脚本里,再使用sed搭配-f选项 
 -f<script文件>或--file=<script文件> 以选项中指定的script文件来处理输入的文本文件。
 ​
 [root@localhost ~]# vim s.sed
 s/MA/Massachusetts/ 
 s/PA/Pennsylvania/ 
 s/CA/California/ 
 s/VA/Virginia/ 
 s/OK/Oklahoma/
  
 [root@localhost ~]# sed -f s.sed test.txt
 保存输出:
 [root@localhost ~]# sed -f s.sed test.txt > newfile.txt

地址(定址)

地址用于决定对哪些  进行编辑。地址形式可以是数字、正则表达式或二者的结合。如果没有指定地址,sed将处理输入文件中的所有行。

 [root@localhost ~]# head /etc/passwd > passwd  #生成测试文件
 ​
 [root@localhost ~]# sed -r '1d' passwd   #d:表示删除-- 删除文件的第1行 
 bin:x:1:1:bin:/bin:/sbin/nologin 
 daemon:x:2:2:daemon:/sbin:/sbin/nologin
 ​
 [root@localhost ~]# sed -r '1,2d' passwd #删除文件的1-2行 daemon:x:2:2:daemon:/sbin:/sbin/nologin
 ​
 [root@localhost ~]# cat passwd
 root:x:0:0:root:/root:/bin/bash 
 bin:x:1:1:bin:/bin:/sbin/nologin 
 daemon:x:2:2:daemon:/sbin:/sbin/nologin 
 ...
 [root@localhost ~]# sed -r '2,$d' passwd     #删除第2行到最后一行
 root:x:0:0:root:/root:/bin/bash 
 ​
 [root@localhost ~]# sed -r '/^root/d' passwd    #匹配到root开头的行,删除此行
 bin:x:1:1:bin:/bin:/sbin/nologin 
 daemon:x:2:2:daemon:/sbin:/sbin/nologin
 ​
 [root@localhost ~]# sed -r '/root/d' passwd  #含有root的行都删除
 bin:x:1:1:bin:/bin:/sbin/nologin
 daemon:x:2:2:daemon:/sbin:/sbin/nologin
 ​
 [root@localhost ~]# sed -r '/bash/,3d' passwd  #匹配到bash行,从此行到第3行删除
 adm:x:3:4:adm:/var/adm:/sbin/nologin
 ​
 [root@localhost ~]# cat -n passwd
     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
     6 sync:x:5:0:sync:/sbin:/bin/sync
     7 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
     8 halt:x:7:0:halt:/sbin:/sbin/halt
     9 mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
     10 operator:x:11:0:operator:/root:/sbin/nologin
 [root@localhost ~]# sed -r '1~2d' passwd   #删除奇数行
 bin:x:1:1:bin:/bin:/sbin/nologin 
 adm:x:3:4:adm:/var/adm:/sbin/nologin 
 sync:x:5:0:sync:/sbin:/bin/sync 
 halt:x:7:0:halt:/sbin:/sbin/halt 
 operator:x:11:0:operator:/root:/sbin/nologin
 ​
 [root@localhost ~]# sed '0~2d' passwd    #删除偶数行
 passwd root:x:0:0:root:/root:/bin/bash  
 daemon:x:2:2:daemon:/sbin:/sbin/nologin 
 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown mail:x:8:12:mail:/var/spool/mail:/sbin/nologin

sed流编辑器命令用法及解析

 1.插入命令--i
 [root@localhost ~]# sed -r '2i\222222' passwd  #在第2行插入
 2.修改命令---c
 [root@localhost ~]# sed -r '4c\asfasdf' passwd
 [root@localhost ~]# sed -r '4c\11111111\
 > aaaaaaaaaa\
 > bbbbbbbbb' passwd
 案例:
 [root@localhost ~]# sed -r '7c\SELINUX=enabled' /etc/sysconfig/selinux
 ​
 3.选项 -i 会使得sed用修改后的数据替换原文件
 [root@localhost ~]# sed -r -i '7c\SELINUX=enabled' /etc/sysconfig/selinux #修改
 [root@localhost ~]# sed -r -i 's/SELINUX=enabled/SELINUX=disabled/' /etc/sysconfig/selinux #替换
 ​
 4.由于在使用 -i 参数时比较危险, 所以我们在使用i参数时在后面加上.bak就会产生一个备份的文件,以防后悔
 [root@localhost ~]# sed -r -i.bak 's/root/ROOT/' passwd

sed常见操作

 [root@localhost ~]# cp /etc/ssh/ssh_config .
 ​
 1.删除配置文件中 # 号注释的行
 [root@localhost ~]# sed -ri '/^#/d' ssh_config
 ​
 2.给文件行添加注释:
 [root@localhost ~]# sed -r '2,5s/^/#/' passwd
 ​
 3.给文件行添加和取消注释
 [root@localhost ~]# sed -ri s/^#baseurl/baseurl/g /etc/yum.repos.d/CentOS-Base.repo
 [root@localhost ~]# sed -r s/^mirrorlist/#mirrorlist/g /etc/yum.repos.d/CentOS-Base.repo
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值