两大利器—grep和tail

管道?
| 管道的作用就是将左边命令的输出变成右边命令的输入
grep
命令格式
grep [参数] “关键字” [文件]
常用参数
-E : 扩展的正则表达式
-A: 显示匹配到的字符串所在的行及其后n行
-B: 显示匹配到的所在的行及其前n行
-C: 显示匹配到的字符串所在的行及其前后各n行
-n: 显示行号
-o: 只显示匹配PATTERN 部分
-w: 只显示全字符合的列
-c: 计算符合的列数
-l: 列出文件内容符合指定的文件名称
-v: 显示不包含匹配文本的所有行
-d: 指定查找某个目录
常用匹配多个关键字
grep ‘test1’ | grep ‘test2’
tail
命令格式
tail [参数][文件]
参数
-f 循环读取
-n 显示文件的尾部n行内容
示例1
此命令显示info.log文件的最后10行,如果info.log文件有新内容进来,tail命令会继续显示,直到按下CTRL+C停止

  1. tail -f info.log

示例2
显示info.log文件的所匹配到的关键字”zaygee小号”所在行及其后20行

  1. grep zaygee小号 info.log -A 20

实例3:grep+tail
显示info.log文件所匹配到的关键字”员工”and “zaygee”及尾部后3行

  1. tail info.log -n 3 | grep 员工 | grep zaygee

示例4
显示info.log文件所匹配到的关键字”员工”或者”zaygee”

  1. grep -E '员工|zaygee' info.log

示例5

  1. # 正则匹配cost_time=4位数 且 2022-06-02 19:33 的数据
  2. more square-server.log* | grep -iE "cost_time=[0-9]{4}" | grep "2022-06-02 19:33:*" --color

grep 逻辑匹配

and
grep cat.log | grep “test” | grep “zaygee “

or
grep cat.log | grep -E “test|zaygee”

非逻辑
grep -v grep cat.log


排序、筛选sort、uniq

sort
将文本文件内容进行排序
uniq
用于检查文件中重复出现的行列
参数
-c:在每列旁边显示该行重复的次数
-d:仅显示重复出现的行列
应用
一般sort和uniq会结合使用,例如查找某个字符串出现的次数

  1. # 方式一
  2. grep -o 'xx' info.log | sort |uniq -c
  3. #方式二
  4. grep -o 'xx' info.log | wc -l

文本分析awk

常用语法
awk -F ‘(command)’
参数
-F:指定分隔符
-f:调用脚本
应用

  1. cat request.log | awk -F '(RequestLog|&结果)' '{print $2}'

awk命令中 -F指定每行的分隔符;
‘(RequestLog|&结果)’ 是一个分隔符,是正则表达式,即用’RequestLog’或者’&结果’作为分隔符;
‘{print $2}’表示将每行的第2个值打印出来,$0代表打印全部;

cat、awk、uniq、sed、more、less综合应用

  1. cat test.txt | awk -F '(d|&s)' '{print $1}'|sort|uniq -c > testfile
  1. tail info.log -n 3 | grep 员工 | grep zaygee | more
  1. tail info.log -n 3 | grep 员工 | grep zaygee | less
  1. cat -n info.log | tail -n +100 | head -n 20
  2. #tail -n +100 表示查100行之后的日志
  3. #head -n 20 表示在前面的查询结果再查20条记录
  1. sed -n "100, 111p" info.log
  2. # 查看文件100行到111行的日志

cat test.txt:打开test.txt文件
awk -F ‘(d|&s)’ ‘{print $1}’:按规则分隔并打印第一行
sort|uniq -c:排序且计算重复
> testfile:将结果输出到文件testfile
more:可翻页查看,点击空格翻页
less:可上下翻页查看
image.png