测试必会之Linux三剑客(grep/awk/sed)

**

测试必会之Linux三剑客(grep/awk/sed)

**
**

1.grep

grep:根据用户指定的模式(pattern)对目标文本进行过滤,显示被模式匹配到的行。
命令形式:grep [OPTIONS] PATTERN [FILE…]
选项
     -v:显示不被pattern匹配到的行
      -i:忽略字符大小写
     -n:显示匹配的行号
     -c:统计匹配的行数
     -o:仅显示匹配到的字符串
     -E:使用ERE,相当于egrep


   访问 testerhome 主页,找出主页中包含的左右 url,分别进行访问,如果访问成功会返回状态码200,检查所有访问成功的url并打印出来,若没访问成功就打印ERR加上失败的url。

(1)先访问 Testerhome 社区主页,利用 grep href 过滤出所有包含 url 的内容。
命令:curl -s https://testerhome.com | grep href**
在这里插入图片描述 (2)从返回的结果中取出 url,观察发现所有的 url 都被包在了双引号之中,那么在利用 grep -o 命令,加上正则表达式匹配,只打印从 http 开始到 url 结束双引号之前的内容。
命令:curl -s https://testerhome.com | grep href | grep -o “http[^”]*"
在这里插入图片描述
(3)现在我们需要对每个url进行访问取值判断先用curl -I 看看请求返回的头信息内容。
命令:curl -s -I https://testerhome.com/topics/feed
在这里插入图片描述
(4)访问成功返回200,这时候我们一行一行去访问,再用grep命令匹配"200 OK"作为判断条件,筛选出成功的url并打印,然后将失败的 url 加上 ERR 标记也一起打印出来。
命令:curl -s https://testerhome.com | grep href | grep -o “http[^”]*" | while read line;do curl -s -I $line | grep 200 && echo $line || echo ERR $line;done
在这里插入图片描述

2.sed

sed:流编辑器,一次处理一行内容。
根据定位到的数据行修改数据 sed [-nefri] [动作]
与grep的区别:
在这里插入图片描述
命令形式: sed [-hn..][-e<script>][-f<script文件>][文本文件]
-h:显示帮助
-n:仅显示script处理后的结果
-e<script>:以选项中指定的脚本来处理输入的文本内容

-f<script文件>:已选项中指定的脚本文件来处理输入的文本文件

常用动作
     a:新增 sed -e ‘4 a newline’
     c:取代 sed -e ‘2,5c No 2-5 number’
     d:删除 sed -e ‘2,5d’
      i:插入 sed -e ‘2i newline’
     p:打印 sed -n ‘/root/p’
     s:取代 sed -e’s/old/new/g’   g代表全局
例:
   (1)在第四行后添加新字符串
     sed -e '4 newline testfile’test.txt
注意说明:

sed 在修改文件内容时,是另外开辟了一块模式空间,将修改后的内容放入并输出,源文件并未修改;

这时如果想要修改源文件就需要借助 -i 命令,另外为了防止误操作修改文件,一般可以采取这种写法: sed -i.bak ‘s/hello/HELLO/’ text.txt ,这种写法在修改源文件的同时还会生成一份以.bak结尾的备份文件,相较安全。

3.awk

理论上可以代替 grep,awk 具备完整的编程特性。比如执行命令,网络请求等
awk:把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分在进行后续处理。
在这里插入图片描述
命令形式: awk ‘pattern + action’[FILE]
-pattern:正则表达式
-action:对匹配到的内容执行的命令(默认为输出每行内容)

常用参数
      FILENAME: awk浏览的文件名
      BEGIN: 处理文本之前要执行的操作
      END: 处理文本之后要执行的操作
      FS: 设置输入域分隔符,等价于命令-F选项
      NF: 浏览记录的域的个数(列数)
      NR: 已读的记录数(行数)
      OFS: 输出域分隔符
      ORS: 输出记录分隔符
      RS: 控制记录分隔符
      $0: 整条记录
      $1: 表示当前行的第一个域…以此类推
例:
(1)搜索/etc/passwd有root关键字的所有行,并显示对应的shell
   awk -F:’/root/{print $7}’/etc/passwd
(2)打印/etc/passwd/的第二行信息
   awk -F:‘NR==2{print $0}’/etc/passwd
   注意:大括号{}里面代表动作,{}外面代表正则
(3)使用begin加入标题
    awk ‘BEGIN {print"BEGIN",“BEGIN”}{print$1,$2}’/etc/passwd
(4)自定义分隔符
    echo 111 222|333 444|555 666"|awk ‘BEGIN{RS="|"}{print $0}’

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值