grep 文本搜索实战:从基础匹配到日志排查
grep 是 Linux 下最常用的文本搜索工具之一,名字源自早期 ed 编辑器的 g/re/p 命令,含义是全局搜索正则表达式并打印匹配行。无论是查配置还是翻日志,grep 几乎每天都会用到。
一、基础用法
最简单的用法是 grep 关键词 文件名,例如在 Nginx 错误日志里找 502:
grep “502” /var/log/nginx/error.log
加上 -n 显示行号,-i 忽略大小写:
grep -ni “error” /var/log/nginx/error.log
只想判断有没有匹配,用 -q 静默模式配合 if:
if grep -q “Out of memory” /var/log/messages; then echo “内存告警”; fi
二、正则表达式
grep 默认支持基础正则,-E 开启扩展正则后更顺手。常见元字符:^ 行首,$ 行尾,. 任意一个字符,* 前一个字符出现任意次,[] 字符集合。
找出以 error 开头、后面跟数字的行:
grep -E “^error [0-9]+” app.log
从访问日志提取 IP 并统计访问量:
grep -Eo “([0-9]{1,3}.){3}[0-9]{1,3}” access.log | sort | uniq -c | sort -nr
三、递归搜索
在项目里找某个函数定义,-r 递归搜索整个目录:
grep -rn “func main” --include=“*.go” ./src
–include 限定后缀,–exclude-dir 跳过 .git、node_modules,速度快很多:
grep -rn “TODO” --exclude-dir={.git,node_modules} .
只想看文件名用 -l,想找出不包含某关键词的文件用 -L。
四、上下文与高亮
定位问题时,光看到匹配行不够,还要看它前后发生了什么。-A 显示之后的内容,-B 显示之前的内容,-C 两边都显示:
grep -C 5 “Exception” app.log
–color=auto 把关键词标红,配合 less 时加 -R。
五、容易踩的坑
第一,grep 默认跳过二进制文件,用 -a 当文本处理。第二,搜索内容以连字符开头时,如 grep “-n” file 会被当成选项,写成 grep – “-n” file 或 grep -e “-n” file。第三,大文件用 -m 1 找到第一条就停。
六、小结
grep 核心三步:关键词定位、正则收窄、再用 -r、-A/-B/-C 和管道组合排查,日常日志分析和代码检索基本都能覆盖。
- 点赞
- 收藏
- 关注作者
评论(0)