grep 文本搜索实战:从基础匹配到日志排查

举报
yd_282444815 发表于 2026/11/12 01:18:28 2026/11/12
【摘要】 grep 是 Linux 下最常用的文本搜索工具之一,名字源自早期 ed 编辑器的 g/re/p 命令,含义是全局搜索正则表达式并打印匹配行。无论是查配置还是翻日志,grep 几乎每天都会用到。 一、基础用法最简单的用法是 grep 关键词 文件名,例如在 Nginx 错误日志里找 502:grep “502” /var/log/nginx/error.log加上 -n 显示行号,-i 忽略...

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 和管道组合排查,日常日志分析和代码检索基本都能覆盖。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。