真正的问题经常是“哪个文件里包含这段文字”。grep 读取文本,并返回匹配模式(pattern)的行,适合日志排查、配置搜索和代码浏览。
基本匹配与大小写
grep "error" app.log 显示包含小写 error 的行。默认区分大小写;grep -i "error" app.log 同时匹配 error、Error 和 ERROR。-n 会显示行号,例如 grep -n "timeout" app.log。
减少噪音或扩大范围
-v 反向匹配,例如 grep -v "DEBUG" app.log 排除 DEBUG 行。-r 递归搜索目录,grep -rn "database_url" . 同时给出文件路径与行号;只想知道哪些文件匹配时使用 -l。
-i忽略大小写
-n显示行号
-v显示不匹配的行
-r递归搜索目录
-l只列文件名
-w匹配完整单词
-c统计匹配行数
^ / $匹配行首 / 行尾
完整单词、正则与计数
grep -w "cat" animals.txt 匹配完整单词 cat,不会把 category 当成同一个词。^ERROR 只匹配以 ERROR 开头的行,failed$ 只匹配以 failed 结尾的行。只需数量时,grep -c "ERROR" app.log 直接返回匹配行数。
组合参数:grep -ril "TODO" . 可以忽略大小写、递归查找,并且每个匹配文件只显示一次路径。
互动实验
日志高亮搜索器
访问权限免费
1
INFO server started on port 80802
DEBUG cache warmup complete3
ERROR database connection timeout4
INFO catalog contains cat and dog5
WARN catch block retried request6
error payment gateway unavailable7
ERROR disk usage above threshold等待运行命令
grep -in "error" app.log运行后,左侧命中的原始行和右侧实际输出会同时高亮。
知识测验
题目
要在当前项目及子目录中查找 database_url,并显示行号,应使用?
知识测验
题目
只匹配独立单词 cat,不匹配 category,需要哪个选项?
动手练习
定位生产配置与错误
在当前项目中写出 4 条 grep 命令,分别完成具体调查任务。
- 递归、忽略大小写查找 api_key,并显示文件与行号。
- 只列出包含完整单词 TODO 的文件路径。
- 在 app.log 中显示不含 DEBUG 的行。
- 统计以 ERROR 开头的日志行数。