在后端 / 运维日常工作中,排查bug、筛选异常、统计接口调用量都离不开日志处理,而 grep/awk/sed 这三把Linux工具,就是解决这类问题的效率神器。
这篇文章只讲「日常日志」过滤的核心用法,不搞复杂语法,新手复制粘贴改参数就能搞定大多的场景,主打极简落地。
先明确核心分工
- grep:主打「查找 / 过滤」,快速揪出包含指定关键字的日志行
- awk:主打「按列提取 / 统计」,处理结构化日志(分隔符拆分)、做简单计数求和
- sed:主打「文本替换 / 快速编辑」,批量修改日志内容格式
环境与示例日志
基于Linux终端,示例日志app.log格式如下(时间 | IP | 接口 | 状态 | 响应时间):
2026-02-03 10:00:00 | 192.168.1.1 | /api/user/login | 200 | 15
2026-02-03 10:00:05 | 192.168.1.2 | /api/user/info | 500 | 200
2026-02-03 10:00:10 | 192.168.1.1 | /api/order/create | 200 | 30
2026-02-03 10:00:15 | 192.168.1.3 | /api/user/login | 401 | 10
2026-02-03 10:00:20 | 192.168.1.2 | /api/user/login | 200 | 18
2026-02-03 10:00:25 | 192.168.1.4 | /api/order/pay | 500 | 250
2026-02-03 10:00:30 | 192.168.1.1 | /api/user/info | 200 | 22
一、grep:快速找内容(最常用)
核心:按关键字匹配,输出整行符合条件的内容。
核心语法
grep [参数] "关键字" 日志文件
必学实用参数 + 实战(直接复制)
-
基础查找:找所有500异常日志
grep "500" app.log -
显示行号:找登录接口日志,带行号方便定位
grep -n "/api/user/login" app.log -
多关键字:同时找500和401异常
grep -E "500|401" app.log -
显示上下文:找500异常,同时显示前后各2行(排查报错必备)
grep -C 2 "500" app.log -
反向过滤:过滤掉200正常日志,只留异常
grep -v "200" app.log
小结
记住:找内容用grep,行号 -n、多关键字 -E、上下文 -C、反向过滤 -v。
二、awk:按列提取+统计(处理数据)
核心:按分隔符拆分列,提取数据或做简单统计。
核心语法
awk -F "分隔符" '条件 {处理动作}' 日志文件
必学基础 + 实战(直接复制)
-
按列提取:指定
|为分隔符,提取所有接口路径(第3列)awk -F "|" '{print $3}' app.log -
条件提取:提取500异常的 IP 和接口(第2、3列)
awk -F "|" '$4 == " 500" {print $2, $3}' app.log -
分组统计:统计每个接口的调用次数(日常高频)
awk -F "|" '{arr[$3]++} END{for (i in arr) print i, arr[i]}' app.log -
数值计算:计算登录接口的平均响应时间
awk -F "|" '$3 == " /api/user/login" {sum+=$5; count++} END{print "平均响应时间:", sum/count}' app.log
小结
记住:-F指定分隔符、$n引用第 n 列、数组统计次数、END输出最终结果。
三、sed:批量替换+编辑(修改文本)
核心:批量替换、删除文本内容,处理日志格式很方便。
核心语法
sed [参数] 's/旧内容/新内容/替换标记' 日志文件
必学实用参数+实战
-
基础替换:将日志中的
500替换为SERVER_ERROR(仅输出,不修改原文件)sed 's/500/SERVER_ERROR/' app.log -
全局替换:每行所有匹配的内容都替换(默认只替换每行第一个)
sed 's/|/ /g' app.log # 把所有|替换为空格,规整格式 -
修改原文件:直接修改日志文件(加
-i,谨慎使用,建议先备份)sed -i 's//api//v1/api/g' app.log # 给所有接口加v1前缀(Linux) # macOS 需加后缀(空后缀直接修改):sed -i '' 's//api//v1/api/g' app.log -
删除行:删除包含
200的正常日志行(输出结果,不修改原文件)sed '/200/d' app.log
小结
记住:替换用s/旧/新/g、全局替换加g、修改原文件加-i、删除行用/关键字/d。
四、日常高频组合用法
三剑客可以通过管道符|组合使用,解决更复杂的需求,举个栗子🌰:
-
先过滤500异常,再提取IP并去重
grep "500" app.log | awk -F "|" '{print $2}' | sort | uniq -
先提取接口,再替换格式,最后统计次数
awk -F "|" '{print $3}' app.log | sed 's/ //g' | sort | uniq -c
总结
- 快速查找关键字:用 grep,核心参数
-n/-E/-C/-v。 - 按列提取 / 统计数据:用 awk,核心
-F分隔符、$n列引用。 - 批量替换 / 编辑文本:用 sed,核心
s/旧/新/g、-i修改原文件。 - 复杂需求用管道符
|组合三剑客,复制文中示例改参数即可落地。