linuxgrep命令怎么使用(利器测试必会之)(1)

点击此处添加图片说明文字

本文为霍格沃兹测试学院优秀学员课程学习系列笔记,希望大吉可以从中学到想学习的知识。

Linux 给人的印象是黑乎乎的神秘窗口,文本操作和数据处理似乎没有 Windows 窗口界面直观方便。其实Linux 有自己的独特的法宝,称之为三剑客:grep,awk 和 sed。你可以用这三件法宝很方便的处理数据 :查找,分段,修改,而这三个功能对应着我们今天的主角:grep,awk,sed。

形象一点比喻,如果把数据比作人群,那么 grep 就是照妖镜,用来找出妖精;awk 就是尺子,给人群分门别类;而 sed 就是宝剑,用来除掉妖精。当你明白为什么要用三剑客时,就更容易拿这三把剑去斩妖除魔。

linuxgrep命令怎么使用(利器测试必会之)(2)

grep-global regular expression print - 全局正则表达式打印

可用于数据查找定位

先列举出测试工作常用的grep命令和意义:

linuxgrep命令怎么使用(利器测试必会之)(3)

下面以一个检查首页是否有死链的案例需求来展示 grep 的匹配用法

  • 以目前国内最大的测试社区网站 testerhome 为例,访问 testerhome 主页,找出主页中包含的左右 url,分别进行访问,如果访问成功会返回状态码200,检查所有访问成功的url并打印出来,若没访问成功就打印ERR加上失败的url。

1. 先访问 Testerhome 社区主页,利用 grep href 过滤出所有包含 url 的内容。命令:

linuxgrep命令怎么使用(利器测试必会之)(4)

2.从返回的结果中取出 url,观察发现所有的 url 都被包在了双引号之中,那么在利用 grep -o 命令,加上正则表达式匹配,只打印从 http 开始到 url 结束双引号之前的内容。命令:

linuxgrep命令怎么使用(利器测试必会之)(5)

3. 从上一步中我们已经取出了完整的 url 了,现在我们需要对每个url进行访问取值判断

3.1. 先用curl -I 看看请求返回的头信息内容。命令:

linuxgrep命令怎么使用(利器测试必会之)(6)

3.2. 访问成功返回200,这时候我们一行一行去访问,再用grep命令匹配"200 OK"作为判断条件,筛选出成功的url并打印,然后将失败的 url 加上 ERR 标记也一起打印出来。命令

linuxgrep命令怎么使用(利器测试必会之)(7)

2. awk

linuxgrep命令怎么使用(利器测试必会之)(8)

awk = “Aho Weiberger and Kernighan” 三个作者的姓的第一个字母

awk 是 Linux 下的一个命令,同时也是一种语言解析引擎awk 具备完整的编程特性。比如执行命令,网络请求等精通 awk,是一个 Linux 工作者的必备技能语法:awk ‘pattern{action}’

awk pattern语法:

  • awk 理论上可以代替 grep

awk ‘pattern{action}’ ,默认以空格分隔

linuxgrep命令怎么使用(利器测试必会之)(9)

awk的字段数据处理

-F 参数指定字段分隔符

BEGIN{FS=‘_’} 也可以表示分隔符

linuxgrep命令怎么使用(利器测试必会之)(10)

下面以一个在nginx.log中查找返回状态码非200的请求响应数目的需求为例,演示awk的基础用法

有一份nginx.log文件,打开后内容格式如下:

(1)220.181.108.111 - - [05/Dec/2018:00:11:42 0000] "GET /topics/15225/show_wechat HTTP/1.1" 200 1684 "-" "Mozilla/5.0 (compatible; Baiduspider/2.0; http://www.baidu.com/search/spider.html)" 0.029 0.029 .

(2)216.244.66.241 - - [05/Dec/2018:00:11:42 0000] "GET /topics/10052/replies/85845/reply_suggest HTTP/1.1" 301 5 "-" "Mozilla/5.0 (compatible; DotBot/1.1; http://www.opensiteexplorer.org/dotbot, help@moz.com)" 0.016 0.016 .

(3)216.244.66.241 - - [05/Dec/2018:00:11:42 0000] "GET /topics/10040?order_by=created_at HTTP/1.1" 301 5 "-" "Mozilla/5.0 (compatible; DotBot/1.1; http://www.opensiteexplorer.org/dotbot, help@moz.com)" 0.002 0.002 .

(4)216.244.66.241 - - [05/Dec/2018:00:11:42 0000] "GET /topics/10043/replies/85544/reply_suggest HTTP/1.1" 301 5 "-" "Mozilla/5.0 (compatible; DotBot/1.1; http://www.opensiteexplorer.org/dotbot, help@moz.com)" 0.001 0.001 .

(5)216.244.66.241 - - [05/Dec/2018:00:11:44 0000] "GET /topics/10075/replies/89029/edit HTTP/1.1" 301 5 "-" "Mozilla/5.0 (compatible; DotBot/1.1; http://www.opensiteexplorer.org/dotbot, help@moz.com)" 0.001 0.001 .

(6)216.244.66.241 - - [05/Dec/2018:00:11:44 0000] "GET /topics/10075/replies/89631/edit HTTP/1.1" 301 5 "-" "Mozilla/5.0 (compatible; DotBot/1.1; http://www.opensiteexplorer.org/dotbot, help@moz.com)" 0.001 0.001 .

(7)216.244.66.241 - - [05/Dec/2018:00:11:45 0000] "GET /topics/10075?order_by=created_at HTTP/1.1" 301 5 "-" "Mozilla/5.0 (compatible; DotBot/1.1; http://www.opensiteexplorer.org/dotbot, help@moz.com)" 0.000 0.000 .

(8)216.244.66.241 - - [05/Dec/2018:00:11:45 0000] "GET /topics/10075?order_by=like HTTP/1.1" 301 5 "-" "Mozilla/5.0 (compatible; DotBot/1.1; http://www.opensiteexplorer.org/dotbot, help@moz.com)" 0.001 0.001 .

(9)223.71.41.98 - - [05/Dec/2018:00:11:46 0000] "GET /cable HTTP/1.1" 101 60749 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:63.0) Gecko/20100101 Firefox/63.0" 2608.898 2608.898 .

(10)113.87.161.17 - - [05/Dec/2018:00:11:39 0000] "GET /cable HTTP/1.1" 101 3038 "-" "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.62 Safari/537.36" 112.418 112.418 .

(11)216.244.66.241 - - [05/Dec/2018:00:11:46 0000] "GET /topics/10079/replies/119591/edit HTTP/1.1" 301 5 "-" "Mozilla/5.0 (compatible; DotBot/1.1; http://www.opensiteexplorer.org/dotbot, help@moz.com)" 0.001 0.001 .

(12)216.244.66.241 - - [05/Dec/2018:00:11:46 0000] "GET /topics/10089?locale=zh-TW HTTP/1.1" 301 5 "-" "Mozilla/5.0 (compatible; DotBot/1.1; http://www.opensiteexplorer.org/dotbot, help@moz.com)" 0.002 0.002 .

观察log内容,可以发现,以空格为分隔符,状态码在第九个字段位置;这里我们用awk命令从第九个字段位置开始匹配非200的状态码并打印出来。命令:

linuxgrep命令怎么使用(利器测试必会之)(11)

​再对取出的数据进行排序->去重->按数字的倒叙进行排列。命令:

linuxgrep命令怎么使用(利器测试必会之)(12)

想了解下面更多内容,可阅读下篇。

(文章来源于霍格沃兹测试学院)

,