sed综合脚本应用

4案例4:sed综合脚本应用

4.1问题

本案例要求编写脚本getupwd.sh,实现以下需求:

  • 找到使用bash作登录shell的本地用户
  • 列出这些用户的shadow密码记录
  • 按每行“用户名--> 密码记录”保存到getupwd.log,如图所示

4.2方案

基本思路如下:

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

4.3步骤

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

步骤一:编写getupwd.sh脚本

[root@svr5 ~]# vim ./getupwd.sh  
#/bin/bash
A=$(sed -n '/bash$/s/:.*//p' /etc/passwd)             ## 提取符合条件的账号记录
for i in  $A                                         ##遍历账号记录
do
    pass1=$(grep $i /etc/shadow)
    pass2=${pass1#*:}                               ##从左向右最短匹配删除
    pass=${pass2%%:*}                               ##从右向左最长匹配删除
    echo  "$i   --> $pass" >>/tmp/getupwd.log
done
echo "用户分析完毕,请查阅文件 /tmp/getupwd.log"
[root@svr5 ~]# chmod +x ./getupwd.sh 

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

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

从上述参考脚本可以发现,使用sed来实现字段提取会比较复杂。此脚本还可以使用awk命令来实现实验目的,更加的简单。

总结知识点:

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

选项:

-n 屏蔽默认输出

-r 支持扩展正则

-i 修改源文件

条件:

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

/正则/

指令:

p 打印

d 删除

s 替换s/旧/新/g

a 追加

i 插入

c 替换行

发布了145 篇原创文章 · 获赞 3 · 访问量 5349

猜你喜欢

转载自blog.csdn.net/weixin_41176080/article/details/103998692