ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

Mac 当主机,Linux 当服务器(23)grep 实战——在 10 万行日志里找一根针

Mac 当主机,Linux 当服务器(23)grep 实战——在 10 万行日志里找一根针

摘要:grep是日志分析的第一把刀,但很多人只会grep 关键词,结果一屏刷几千行、想统计又数不出来。这篇把grep讲透:-c统计、-n定位、-v排除、-i忽略大小写、-E扩展正则、-A/-B/-C看上下文、-f从文件读模式;再给三条实战管道(404 统计、IP 过滤、/posts/访问量),以及「结果太多怎么逐步缩小范围」的四步法。核心只有一句话:grep是筛子,不是计算器。

承接上篇:日志分析的三层次「看 → 筛 → 析」和grep/awk/sed的分工讲清了。


一、老周的「针」和「海」

早上到工位,老周丢给小林一个任务:

「你练的那份access.log,现在多少行?」

sudowc-l/var/log/nginx/access.log

输出:

102347 /var/log/nginx/access.log

「10 万行。」小林说。

「现在,你从这 10 万行里,找出所有状态码 500 的请求,统计有多少条,列出前 5 个 URL。」

小林打开grep手册,准备逐条查参数。

老周拦住他:「别查手册。手册是字典,不是教材。你直接上手,遇到问题再查。」

「那我怎么写?」

「你想想,你要什么。」

「我要 500 的请求。」

「那你就grep " 500 "。」

sudogrep" 500 "/var/log/nginx/access.log

终端刷了一屏,还在继续。

「停。」老周说,「你Ctrl+C。」

小林按了Ctrl+C。

「你犯了两个错。」老周说,「第一,你没统计数量,直接刷屏。第二,你没想清楚grep到底怎么用。今天,我就把grep给你讲透。」


二、grep的基本逻辑:按行匹配

「grep的逻辑非常简单。你给它一个模式,它逐行扫描,把匹配的行打印出来。」

grep"模式"文件

「它会输出所有包含500的行。注意,前后有空格。」

「为什么加空格?」

「因为500可能出现在 IP 里、响应大小里、时间戳里。加空格,是为了把匹配限定在状态码那一段。」老周说,「但这不是最严谨的——最严谨的是awk '$9 == 500'。」

「那grep还有啥用?」

「grep适合快速过滤文本。比如你找某个 IP、某个 URL、某个关键词。」老周说,「grep是『筛子』,不是『计算器』。你用它筛出你关心的行,再用awk去算。」

小林记下:

  • grep "模式" 文件:按行匹配;
  • 加空格是为了精确匹配字段;
  • grep负责筛,awk负责算。

三、grep常用参数:一个一个试

-c:只统计数量

「你刚才刷屏,就是因为没加-c。」

sudogrep-c" 500 "/var/log/nginx/access.log

输出:

500

「500 条 500 请求。」小林说。

「-c只输出匹配行数,不输出内容。你以后统计数量,第一反应就是-c。」

-n:显示行号

「你想知道 500 请求在第几行。」

sudogrep-n" 500 "/var/log/nginx/access.log|head-5

输出:

1234:192.168.1.100 - - [14/Sep/2026:10:00:03 +0800] "GET /api/health HTTP/1.1" 500 153 "-" "curl/7.81.0" 5678:192.168.1.101 - - [14/Sep/2026:10:05:12 +0800] "POST /api/login HTTP/1.1" 500 200 "-" "curl/7.81.0" ...

「行号在冒号前面。」老周说,「你以后定位问题,用-n找到行号,再用sed -n '行号p'看上下文。」

-v:反向匹配

「你想排除某些行。」

sudo
返回列表