文章目录
以下是nginx.log中的部分日志
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/d4bb779dad372a4962c0a960f23c3587.png)
1 提取nginx.log中的 404 和 500 报错的数目并打印**
1.1 grep用法
方法1:使用grep的-c参数
$grep -E -c ' 404 | 500 ' nginx.log
267
分析:
’ 404 | 500 '是正则表达式,其中|代表或,所以要用到扩展正则:-E ,另外也可以写成-cE,如下:
$grep -cE ' 404 | 500 ' nginx.log
267
方法2: 使用wc -l
$grep -E ' 404 | 500 ' nginx.log | wc -l
267
拓展:grep的-c 和wc -l是输出满足条件的行数,若一行当中有多个符合条件的404或500,那么统计方法有误,需要使用grep 的-o 是输出所有的匹配内容,然后再统计
$grep -E -c -o ' 404 | 500 ' nginx.log
267
1.2 awk用法
$awk '$9~/404|500/' nginx.log | wc -l
267
2 提取nginx.log中的访问量最多的三个ip地址
方法1:
$grep -E -o '^[0-9{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}' nginx.log | sort | uniq -c | sort -nr | head -3
282 216.244.66
142 40.77.167
130 136.243.151
方法2:
$grep -E -o '^[0-9{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}' nginx.log | sort | uniq -c | sort -n | tail -3
130 136.243.151
142 40.77.167
282 216.244.66
方法3:
$awk '{print $1}' nginx.log | sort | uniq -c | sort -nr | head -3
282 216.244.66.241
130 136.243.151.90
110 127.0.0.1
- 正则匹配IP地址 ^[0-9{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}
- sort 排序
- uniq -c 去重并计数,因uniq检查重复时,只会检查相邻的行,所以要先sort
- sort -nr -n按照数值大小排序,-r以相反的顺序排序
- head -3 显示前3行
- tail -3 显示后3行
3 将 nginx.log 中的topics/数字替换成固定值
$sed s#topics/[0-9]*#topics/number#g nginx.log | head -10
- sed的替换命令s/ /g,其中/可以用其他字符来代替,比如#,为了区分替换的内容里的/
4 将IP地址横向打印
$awk '{print $1}' nginx.log | sed ':1;N;s/\n/|/g;t1'
- sed的工作模式是按行提取内容,忽略换行
- N代表,把下面一行追加到此行,包含换行符
- :1 和t1代表打一个标记为1,t1跳转到标记处,相当于一直进行N;s/\n/|/g 这个操作,其中1可以写成其他值