Linux三剑客 - grep / sed / awk常用方法

前言
随便写写,大家也就随便看看,2020年,争取拿个乒乓球小区冠军。
鉴于高清无码图片较多,请在WIFI条件下观看。
如果想使用log日志做练习的帅哥们,可翻到页面底部,有获取文件的方式。

1 前言

作为一个测试开发工程师,或者开发工程师,在面试时难免会遇到关于linux_shell的问题,作为一个热爱劳动的帅哥,已经就三剑客grep,awk,sed的用法做了一些

总结,学会了下面这几种题型,面试时必不可能失败。
在这里插入图片描述

2 正文

1.统计所有连接到shell服务器的外部IP数,以ip为准

  • netstat -tnp | awk ‘{print $5}’ | awk -F: ‘{print $1}’ | awk ‘{if(NR>2)print}’ | sort | uniq -c |wc -l

    - -F : 与'{print $1}'之间有一个空格的
    
    - netstat -tnp查看  ***图1***
    
    - awk '{print $5}' 取出第五列 ,然后我们的后续其实就是对这个第五列的数据进行处理  ***图2***
    
    - awk -F: '{print $1}'   以冒号作为分割,取出IP  ***图3***,可以看到servers和Address这2个数据我们并不需要 
    
    - 所以 awk '{if(NR>2)print}'  去除前2行的数据 ***图4***
    
    - 后面就是一套组合拳  sort | uniq -c |wc -l  排序,去重,统计 ***图5***
    
  • 因为外部IP是随时变化的,所以大家敲命令(netstat -tnp)的时候要多观察下,可能每次得出的结果都不同





    2.找出nginx.log中的404的报错数据,统计下共有多少404报错

  • cat nginx.log | grep ‘200’ | wc -l // less nginx.log | grep ‘200’ | wc -l

    - Less 启动前不必读取整个输入文件,因此对于大型输入文件,其启动速度比vi 之类的文本编辑器要快
    - wc命令用于计算字数   -l 或 --lines 只显示行数。
    
    - 都是从第一个命令的执行结果作为输入参数传递给第二个命令
    


    3.找出nginx.log中的错误状态码(404/500/301/200…)出现次数最多和最少的状态码

  • awk ‘$9’ nginx.log | awk ‘{print $9}’| sort | uniq -c 图1

    -  sort命令默认将查询出来的数据从低到高(从小到大)排序 即:101-200-301-404-500
    -  uniq -c  -c或--count 在每列旁边显示该行重复出现的次数  ***图1***
    
  • awk ‘$9~/404|500/’ nginx.log | awk ‘{print $9}’| sort | uniq -c

    -  sort -nr    -n 依照数值的大小排序    -r 以相反的顺序来排序  ***图2***
    
  • awk ‘$9’ nginx.log | awk ‘{print $9}’| sort | uniq -c | sort -nr | head -1取出出现次数最多的数(828次) 图3

  • awk ‘$9’ nginx.log | awk ‘{print $9}’| sort | uniq -c | sort -n | head -1 取出出现次数最少的数(1次)图4

  • awk ‘$9’ nginx.log | awk ‘{print $9}’| sort | uniq -c | sort -nr | tail -1 取出出现次数最少的数(1次)图5




4.找出访问量最高的ip ,取前3条数据

  • cat nginx.log | awk ‘{print $1}’ | sort | uniq -c | sort -nr | head -3 图1

  • less nginx.log | awk ‘{print $1}’ | sort | uniq -c | sort -nr | head -3 图2

  • 这里面的命令基本上在上面都说过了,就不多做赘述,大家可以多练习练习

5.找出访问 /topics/xxxxx,以及访问topics/***/replies的 接口的请求分别有多少

  • 首先要观察CTRL +F 全局搜索一下,看看topic接口和topic/***/replies的特点,不管是topic后面的数字还是topic后面的 *都是数字

  • grep -E 或 –extended-regexp : 将样式为延伸的正则表达式来使用

  • grep -E "/topics/[0-9] 图1

    -  ps: [0-9]表示找到一个位置上的字符只能是0-9这个范围内,同理
    	   [^0-9]表示找到这个位置上的字符只能是除了0-9之外的所有字符	
    
  • grep -E “/topics/[0-9]{1,}” nginx.log 图2

    -  {}一般用来匹配字符的长度,{1,}一般表示数字1到无穷大
    
  • grep -E “/topics/[0-9]{1,}” nginx.log | awk ‘{print $7}’ 提取出接口名称 图3

    -  大家注意这里面会有一些接口格式包含了?然后拼接一些参数的,但是这不是我们需要的,所以要继续找到更精确的数据
    
  • grep -E “/topics/[0-9]{1,}” nginx.log | awk ‘{print $7}’ | grep ‘^/topics’ | sed ‘s/?.*//’ 图4

    -  根据图4可以看到虽然已经过滤了?,但是还是有一些其他的字段存在eg:topics/8146/show_wechat
       sed 's/要被取代的字串/新的字串/'       
    -  -s 查找并替换
    -  -g 全局范围替换
    -  测试:echo aaab | sed -e 's/a/c/'      echo aaab | -e 's/a/c/g'  看一下输出就懂了
    
  • 这儿我把命令写在下面一行了,不知道为什么在这儿编辑 $ 符号一直给我报错 图5

  • 在这里插入图片描述

    - 【命令在这】grep -E "/topics/[0-9]{1,}" nginx.log | awk '{print $7}' | grep '^/topics' | sed 's/?.*//' | sed -E 's@[0-9]{1,}$@###@g' 
     
    -  将所有以数字结尾的行,全局替换成###
       @...@   ||  /.../  相同的意思,定界符:设定界限的 符号
    -  测试一下,下面2条命令输出的结果是相同的
       1.grep -E "/topics/[0-9]{1,}" nginx.log | awk '{print $7}' | grep '^/topics' |    sed 's/?.*//' | sed -E 's@[0-9]{1,}$@###@g'| wc -l
       2.grep -E "/topics/[0-9]{1,}" nginx.log | awk '{print $7}' | grep '^/topics' |    sed 's/?.*//' | sed -E 's/[0-9]{1,}$/###/g'|wc -l
    
    -  grep -E "/topics/[0-9]{1,}" nginx.log | awk '{print $7}' | grep '^/topics' |  sed 's/?.*//' | sed -E 's/[0-9]{1,}$/###/g'| sed -E 's@/topics/[0-9]*/replies/[0-9]*/.*@/topics/replies@g' --图6
    -  这儿由于格式问题,只能用代码块来写,不然*会自动切换格式隐藏掉
    -  继续将topics/16689/replies/..格式的接口变换为topics/replies ,方便我们uniq -c去重统计
    
  • 后面就是取出结果了,以一套组合拳收尾 图7

    -  grep -E "/topics/[0-9]{1,}" nginx.log | awk '{print $7}' | grep '^/topics' | sed 's/?.*//' | sed -E 's/[0-9]{1,}$/###/g'| sed -E 's@/topics/[0-9]*/replies/[0-9]*/.*@/topics/replies@g'|sort |uniq -c |sort -nr | head -2
    








    6.找出nginx.log中访问量最高的接口地址,只要标准路径,把变化的数字,query参数或者变化的噪音字段全部去掉。

    举个栗子

  • 对的没错,就是像下面这样的,我们需要将一些噪音字段去掉,那必须是要用三贱客中的sed!

      - /cable
      - /topics/7386/replies/66058/reply_suggest  变成 /topics/replies  
      - /uploads/photo/2017/9eebf333-2729-467f-ac18-5a350608d865.png!large 变成 /uploads/photo/.png
    
  • 但是我们这题重点不是找出访问最高的接口( 上去就是一套组合拳 ),而是要将接口中一些比较乱的数据给替换掉,我靠,太难了这谁会呀,快救我,表妹。首先我们需要将接口名称先取出来观察一下,可以看到接口名称是参差不齐,各有各的特点。
    -在这里插入图片描述
    在这里插入图片描述

  • 经过观察我们的log日志,发现很多接口名称中存在很多诸如get请求方式的接口名称,所以我们要先把 ? 后面的参数给update掉,便于后续操作,这个s///的语法我们前面已经说过了,这里面就不再多说了。

    /topics/10075?order
    

    在这里插入图片描述
    在这里插入图片描述

  • 语法都还是前面说过的,这里面就直接给大家参考了。大家看好了,我这里回车是为了页面好看,不是大家平时见到的那种每句末尾加一个 \ 那种写法,最后还是已组合拳收尾。

awk '{print $7}' nginx.log|sed 's/[?].*//'
|sed -E 's@/topics/[0-9]{1,}$@/topics/topics@g'
|sed -E 's@/topics/[0-9]*/replies/[0-9]*/.*@topics/replies@g' 
|sed 's@/uploads/photo/.*@/uploads/photo.png@' 
|sort|uniq -c|sort -nr |head -5

在这里插入图片描述

3 结束语

下一篇文章:如何使用Jenkins构建搭载钉钉以及邮箱通知
我希望在看这个文章的你,在新的一年,顺顺利利,并能够朝着定下得目标冲呀。
在这里插入图片描述
重点来了:
喜欢得朋友可以点个关注,今天这个文章真的是码了我4个多小时呢。老腰都酸死了。
本篇文章所用到得nginx日志都在本人得公众号,【回复】日志免费领取。
在这里插入图片描述

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Linux三剑客指的是 awksedgrepawk 是一种用来处理文本文件的工具,它可以根据指定的模式进行自动分割并进行数据处理。 sed 是一种流编辑器,它可以对文本文件进行替换、删除和插入操作。 grep 是一种文本搜索工具,它可以在文本文件中搜索指定的字符串。 ### 回答2: Linux三剑客,分别是awksedgrep,它们是Linux系统中非常重要的命令行工具,它们通常被称为文本处理工具。这些工具通常被用于筛选、搜索和处理文本文件。 grep是一种常见的文本搜索工具,可以在文件和文件夹中搜索指定的字符串或正则表达式。grep可以搜索多个文件并返回匹配行的输出。它是处理日志文件或查找匹配模式的最佳工具之一。 sed是一种流编辑器,可以按照行处理文本文件。它可以通过替换、删除和插入操作来修改文件内容。在大型文件中查找并替换模式是sed的主要作用。该工具通常在文本文件中提取有用信息是常用awk是一种强大的文本操作工具,可以分析大型文本文件并对其进行处理。该工具可以遍历行和列,并提供强大的文本处理工具,如计算、过滤和转换数据。awk的处理速度非常快,适用于处理大型数据文件。 Linux三剑客awk是最强大的工具,它可以执行复杂的文本数据操作和转换,可大大简化开发和管理过程。sed主要用于简单的文本数据过滤和替换,而grep主要用于搜索文件和定位特定行。 总之,Linux三剑客在文本数据处理方面具有不可替代的重要作用。对于Linux操作系统的开发人员和管理员来说,熟练使用这些工具可以提高他们的工作效率,使他们更容易管理和操作文本文件。 ### 回答3: Linux三剑客awk sed grep是我们在日常工作中经常使用的三个命令。它们都属于文本处理工具,可以用于查找、处理、分析文本文件等。 首先,grep是最常用的文本搜索工具。grep可以用来快速查找文件中指定的字符串或正则表达式,并将包含该字符串或正则表达式的行打印出来。常用的命令有grep、egrep和fgrep。比如,我们可以使用grep命令来查找一个文件中包含指定关键字的行,可以使用egrep来支持正则表达式搜索,使用fgrep来进行快速搜索,不支持正则表达式。 其次,sed是一种流编辑器,主要用于对文本文件进行替换、删除、添加、插入等操作。sed命令可以通过管道(|)将多个命令组合起来,从而进行复杂的文本操作。sed可以快速完成对文本文件的修改操作,比如替换文件中的某些内容、删除特定的行、在文件中插入新的文本等。sed的命令形式是“command", 比如"s/old/new/g",表示将old替换成new。 最后,awk是一种强大的文本处理工具,主要用于在文本文件中查找、处理以及格式化特定的字段。和grepsed不同的是,awk更加灵活,可以在处理过程中做到数据过滤和加工,对于大数据的处理特别有用。awk命令的常用语法是"pattern {action}"。其中,pattern代表要匹配的模式,而action代表模式匹配时需要执行的动作,我们可以在其中添加处理语句来对文件进行各种处理操作,比如计算、统计、格式化等。 综上所述,Linux三剑客awk sed grep是我们在文本处理工作中不可或缺的三个工具,不同的工具可以用于处理不同的文本操作,也可以用于搭配使用,以完成更加复杂的文本处理工作。对于需要经常处理文本的人员来说,掌握这些工具是非常必要的。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值