grep 命令

grep (_缩写_来自Globally search a Regular Expression and Print)是一种强大的文本搜索工具,它能使用特定模式匹配(包括正则表达式)搜索文本,并默认输出匹配行。


0. 准备:创建示例日志文件

在终端执行:

1nano test.log
2

粘贴下面内容:

12026-01-27 10:01:12 INFO  App started
22026-01-27 10:01:15 INFO  User login success userId=123
32026-01-27 10:02:01 WARN  VIDEO_BLUR enabled for low bandwidth
42026-01-27 10:02:05 ERROR Network REJECT_TIMEOUT while calling API
52026-01-27 10:02:07 DEBUG psi-p packet received size=512
62026-01-27 10:02:10 INFO  Request finished traceId=abc
72026-01-27 10:03:00 ERROR Payment failed orderId=998
82026-01-27 10:03:10 INFO  App closed
9

保存退出:Ctrl + O → 回车 → Ctrl + X

查看文件:

1cat test.log
2

1. 单关键词过滤(忽略大小写)

命令

1grep -i error test.log
2

实际输出

12026-01-27 10:02:05 ERROR Network REJECT_TIMEOUT while calling API
22026-01-27 10:03:00 ERROR Payment failed orderId=998
3

解释

  • grep:搜索工具
  • error:关键词
  • -i:忽略大小写(error / ERROR 都匹配)

2. 多关键词 OR(error 或 timeout 或 fail)

命令

1grep -E -i "error|timeout|fail" test.log
2

实际输出

12026-01-27 10:02:05 ERROR Network REJECT_TIMEOUT while calling API
22026-01-27 10:03:00 ERROR Payment failed orderId=998
3

(第一行包含 timeout,第二行包含 fail)

解释

  • -E:启用扩展正则,支持 A|B|C
  • |:或(OR)
  • -i:忽略大小写

3. 指定你原始的 3 个关键词

命令

1grep -E -i "REJECT_TIMEOUT|VIDEO_BLUR|psi-p" test.log
2

实际输出

12026-01-27 10:02:01 WARN  VIDEO_BLUR enabled for low bandwidth
22026-01-27 10:02:05 ERROR Network REJECT_TIMEOUT while calling API
32026-01-27 10:02:07 DEBUG psi-p packet received size=512
4

4. 多条件 AND(同时包含 error 和 timeout)

命令

1grep -i error test.log | grep -i timeout
2

实际输出

12026-01-27 10:02:05 ERROR Network REJECT_TIMEOUT while calling API
2

解释

两次过滤:

  1. 先找 error
  2. 再从结果里找 timeout

5. 显示行号

命令

1grep -n -i error test.log
2

实际输出

14:2026-01-27 10:02:05 ERROR Network REJECT_TIMEOUT while calling API
27:2026-01-27 10:03:00 ERROR Payment failed orderId=998
3

6. 查看上下文(前后各 2 行)

命令

1grep -n -C 2 -i "REJECT_TIMEOUT" test.log
2

实际输出

12-2026-01-27 10:01:15 INFO  User login success userId=123
23-2026-01-27 10:02:01 WARN  VIDEO_BLUR enabled for low bandwidth
34:2026-01-27 10:02:05 ERROR Network REJECT_TIMEOUT while calling API
45-2026-01-27 10:02:07 DEBUG psi-p packet received size=512
56-2026-01-27 10:02:10 INFO  Request finished traceId=abc
6

7. 排除某类日志(去掉 DEBUG)

命令

1grep -v "DEBUG" test.log
2

实际输出

12026-01-27 10:01:12 INFO  App started
22026-01-27 10:01:15 INFO  User login success userId=123
32026-01-27 10:02:01 WARN  VIDEO_BLUR enabled for low bandwidth
42026-01-27 10:02:05 ERROR Network REJECT_TIMEOUT while calling API
52026-01-27 10:02:10 INFO  Request finished traceId=abc
62026-01-27 10:03:00 ERROR Payment failed orderId=998
72026-01-27 10:03:10 INFO  App closed
8

8. 只看最后 N 行再过滤

命令

1tail -n 4 test.log | grep -i error
2

实际输出

12026-01-27 10:03:00 ERROR Payment failed orderId=998
2

9. 实时监控日志

命令

1tail -f test.log | grep -i error
2

模拟追加日志

另一个终端执行:

1echo "2026-01-27 10:04:00 ERROR New crash happened" >> test.log
2

实时窗口看到

12026-01-27 10:04:00 ERROR New crash happened
2

10. 你那条命令的完整含义

1grep -E -i "REJECT_TIMEOUT|VIDEO_BLUR|psi-p" tico_app2.log
2

等价于:

在 tico_app2.log 中查找包含以下任意关键词的行:

  • REJECT_TIMEOUT
  • VIDEO_BLUR
  • psi-p

并忽略大小写。


11. 必记 5 条黄金命令

1# 单关键词
2grep -i error app.log
3
4# 多关键词 OR
5grep -E -i "error|timeout|fail" app.log
6
7# 多条件 AND
8grep -i error app.log | grep -i timeout
9
10# 行号 + 上下文
11grep -n -C 3 -i error app.log
12
13# 实时监控
14tail -f app.log | grep -i error
15

12. 更快的替代:ripgrep(rg)

1brew install ripgrep
2rg -i "error|timeout|fail" app.log
3

速度通常比 grep 快 3~10 倍。



grep一下》 是转载文章,点击查看原文