📖 先唠两句
大家好啊,我是阿垚。
欢迎来到《每日一命令》第01期。
这个专栏每天3分钟,掌握一个命令行神器。不讲长篇大论,只挑最实用、最容易被忽略的命令。
今天是第01期,聊一个所有程序员都离不开的命令:
grep
🤔 你是不是也这么干过?
打开日志文件,按Ctrl+F,输入关键词,一个个翻页找。
文件小还好,文件一大(比如几百MB的日志),编辑器直接卡死。
更惨的是,你要在100个日志文件里找同一个关键词——一个个打开,一个个搜,搜到怀疑人生。
这时候,grep就是你的救星。
🔧 grep是什么?
grep是 Linux/Unix 下的文本搜索工具,全称是Global Regular Expression Print。
翻译成人话:在文件里快速找内容,支持正则表达式,秒出结果,不用打开文件。
📝 最常用的5种姿势
1. 基础搜索:找关键词
bash
grep "error" app.log
在 app.log 中搜索所有包含 "error" 的行。一秒出结果,不用打开文件。
2. 忽略大小写
bash
grep -i "error" app.log
不管是大写 ERROR、小写 error、还是混合 eRrOr,全找出来。
3. 显示行号
bash
grep -n "error" app.log
告诉你错误出现在第几行,去编辑器里直接跳转,不用眼瞎。
4. 递归搜索整个目录
bash
grep -r "error" /var/log/
搜索 /var/log/ 下所有文件,找出包含 "error" 的行。不用一个个文件打开。
5. 只匹配完整单词
bash
grep -w "error" app.log
只匹配完整的 "error" 单词,不会匹配 "error123" 或 "error_log"。
🚀 进阶技巧(高手必看)
组合搜索:或关系
bash
grep -E "error|fail|timeout" app.log
找包含 error、fail或timeout 的行。一条命令搞定三种关键词。
组合搜索:与关系
bash
grep "error" app.log | grep "database"
先找 error,再从中找 database。相当于error AND database。
排除某些行
bash
grep -v "debug" app.log
显示所有不包含"debug" 的行。看错误日志时排除干扰项。
显示匹配结果的前后几行
bash
grep -B 2 -A 3 "error" app.log
显示 error 所在行的前2行和后3行。光看一行不够,上下文才是真相。
只统计匹配数量,不显示内容
bash
grep -c "error" app.log
只告诉你有多少个 error,不刷屏。适合快速了解错误数量。
💡 真实场景
场景1:排查接口500报错
bash
grep "500" /var/log/nginx/access.log
找出所有返回500错误的请求,看看是哪个接口在报错。
场景2:找某个IP的访问记录
bash
grep "192.168.1.100" /var/log/nginx/access.log
某个IP在搞事情?一条命令查出来。
场景3:找今天凌晨3点的报错
bash
grep "2026-04-15 03:" app.log | grep -i error
凌晨3点被报警吵醒?先看看那时候发生了什么。
场景4:在100个配置文件里找某个配置项
bash
grep -r "max_connections" /etc/
不用一个个打开,grep帮你搜完。
⚠️ 小贴士
| 参数 | 含义 | 使用场景 |
|---|---|---|
-i | 忽略大小写 | 不确定大小写时 |
-n | 显示行号 | 需要定位到具体位置 |
-r | 递归搜索 | 搜索整个目录 |
-w | 匹配完整单词 | 避免匹配到包含关系 |
-v | 排除匹配 | 过滤干扰信息 |
-c | 只统计数量 | 快速了解有多少条 |
-E | 正则表达式 | 复杂匹配条件 |
🔜 下期预告
《每日一命令02:awk——一个被低估的表格处理高手》
评论区说说你最常用的grep参数是什么?
——阿垚,一个踩过2万次坑的“老”IT