grep 配合管道是 linux 日志过滤最常用高效方式,核心为前命令输出日志、grep 筛选关键词;应避免 uuoc,直接 grep 文件;实时监控用 tail -f | grep --line-buffered;支持多级过滤、上下文显示(-c)、行号(-n)和高亮(--color)。

grep 配合管道(|)是 Linux 日志过滤最常用、最高效的方式。它的核心逻辑是:让前一个命令输出日志内容,再由 grep 筛选出含关键词的行,后续还可接其他命令进一步处理。
基础组合:用管道把日志流交给 grep
很多新手习惯先用 cat 读文件再管道给 grep,比如:
cat /var/log/syslog | grep "error"
这其实多余(称为 UUOC — Useless Use of Cat)。grep 本身就能直接读文件,更简洁高效:
- 正确写法:grep "error" /var/log/syslog
- 真正需要管道的场景:当前一个命令不操作文件,而是动态生成或输出内容,比如 ps、dmesg、journalctl、tail 等。
实时监控日志并过滤
排查线上问题时,常需边追加边筛选最新日志:
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
-
tail -f + grep:持续监听并只显示匹配行
tail -f /var/log/nginx/access.log | grep "404" - 加 --line-buffered 防止输出延迟(尤其在高并发日志下):
tail -f /var/log/app.log | grep --line-buffered -i "exception"
多级过滤:串联多个 grep 或配合其他命令
单一关键词不够准?可叠加条件缩小范围:
- 排除干扰项(如过滤掉自身 grep 进程):
ps aux | grep nginx | grep -v grep - 先筛错误类型,再统计 IP:
grep -E "ERROR|CRITICAL" /var/log/app.log | grep "$(date +%b\ %d)" | grep -oE '([0-9]{1,3}\.){3}[0-9]{1,3}' | sort | uniq -c - 结合 awk 提取字段后再过滤:
grep "timeout" /var/log/syslog | awk '{print $1,$2,$9}' | grep -v "0.0.0.0"
增强可读性与定位效率
光看到匹配行还不够,常需上下文或结构化信息:
- 显示匹配行及前后各 3 行:
grep -C 3 "OutOfMemoryError" catalina.out - 标出行号,方便快速跳转:
grep -n -i "failed to bind" /etc/nginx/nginx.conf - 高亮关键词(视觉聚焦):
grep --color=auto -i "warning" /var/log/kern.log










