sed扩展

sed 和awk 都是一个过滤工具

sed是过滤行

awk是过滤列

# sed [选项] '条件指令' 文件..

sed工具的多行文本处理操作:

  • i: 在指定的行之前插入文本
  • a:在指定的行之后追加文本
  • c:替换指定的行

基本语法格式案例:

注意:系统默认没有a.txt文件,需要自己创建一个测试文件!!!

 
  1. [root@svr5 ~]# sed '2a XX' a.txt            //在第二行后面,追加XX
  2. [root@svr5 ~]# sed '2i XX' a.txt            //在第二行前面,插入XX
  3. [root@svr5 ~]# sed '2c XX' a.txt            //将第二行替换为XX

步骤一:修改主机名配置文件

1)确认修改前的配置

 
  1. [root@svr5 ~]# cat /etc/hostname
  2. svr5.tarena.com

2)使用sed修改主机名配置所在行的内容(c整行替换)

 
  1. [root@svr5 ~]# sed '1c mysvr.tarena.com' /etc/hostname 

步骤二:修改hosts文件,添加新的记录

1)确认修改前的配置

 
  1. [root@svr5 ~]# cat /etc/hosts
  2. 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
  3. ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6

2)使用sed修改hosts文件,添加两行新纪录(a追加)

 
  1. [root@svr5 ~]# sed -i '$a 192.168.4.5 svr5.tarena.com svr5' /etc/hosts
  2. 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
  3. ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
  4. 192.168.4.5 svr5.tarena.com svr5

sed综合脚本应用

基本思路如下:

  1. 先用sed工具取出登录Shell为/bin/bash的用户记录,保存为临时文件/tmp/urec.tmp,并计算记录数量
  2. 再结合while循环遍历取得的账号记录,逐行进行处理
  3. 针对每一行用户记录,采用掐头去尾的方式获得用户名、密码字串
  4. 按照指定格式追加到/tmp/getuupwd.log文件
  5. 结束循环后删除临时文件,报告分析结果

实现此案例需要按照如下步骤进行。

步骤一:编写getupwd.sh脚本

 
  1. [root@svr5 ~]# vim ./getupwd.sh
  2. #/bin/bash
  3. A=$(sed -n '/bash$/s/.*://p' /etc/passwd)             ## 提取符合条件的账号记录
  4. for i in $A                                     ##遍历账号记录
  5. do
  6. pass1=$(grep $i /etc/shadow)
  7. pass2=${pass1#*:}
  8. pass=${pass2%%:*}
  9. echo "$i --> $pass"
  10. done
  11. [root@svr5 ~]# chmod +x ./getupwd.sh 

步骤二:测试、验证执行结果

 
  1. [root@svr5 ~]# ./getupwd.sh
  2. 用户分析完毕,请查阅文件 /tmp/getupwd.log
  3. [root@svr5 ~]# less /tmp/getupwd.log
  4. root --> $6$IWgMYmRACwdbfwBo$dr8Yn983nswiJVw0dTMjzbDvSLeCd1GMYjbvsDiFEkL8jnXOLcocBQypOCr4C6BRxNowIxjh6U2qeFU0u1LST/
  5. zengye --> $6$Qb37LOdzRl5995PI$L0zTOgnhGz8ihWkW81J.5XhPp/l7x2./Me2ag0S8tRndCBL9nIjHIKkUKulHxJ6TXyHYmffbVgUT6pbSwf8O71
  6. clamav --> !!
  7. mysql --> !!
  8. abc --> !!
  9. .. ..

从上述参考脚本可以发现,使用sed来实现字段提取会比较复杂。下一章课程将会学到awk命令,届时可以通过更简单的方法来改进此脚本内容。

总结知识点:

#sed [选项] '条件指令' 文件

选项:

-n 屏蔽默认输出

-r 支持扩展正则

-i 修改源文件

条件:

行号 4 4,5 4~2 4,+10

/正则/

指令:

p 打印

d 删除

s 替换s/旧/新/g

a 追加

i 插入

c 替换行

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

运维螺丝钉

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值