用 grep 检索文本:常用选项与正则入门

举报
yd_240997615 发表于 2026/11/07 09:19:41 2026/11/07
【摘要】 grep 是 Linux 里按行搜索文本的命令,基本格式是 grep [选项] 模式 文件。它最常见的用途是查日志:在成千上万行输出里把包含关键字的行挑出来。最简单的例子是 grep "ERROR" app.log,只打印含 ERROR 的行;模式里有空格或特殊字符时记得加引号,否则 shell 会先把它拆开。几个每天都会用到的选项:-i 忽略大小写,日志里 Error、error 混写时很...

grep 是 Linux 里按行搜索文本的命令,基本格式是 grep [选项] 模式 文件。它最常见的用途是查日志:在成千上万行输出里把包含关键字的行挑出来。最简单的例子是 grep "ERROR" app.log,只打印含 ERROR 的行;模式里有空格或特殊字符时记得加引号,否则 shell 会先把它拆开。
几个每天都会用到的选项:-i 忽略大小写,日志里 Error、error 混写时很有用;-n 显示行号,方便定位后再去看原文;-r 递归搜索整个目录;-v 反选,打印不匹配的行;-c 只输出匹配的行数。组合起来,grep -rin "timeout" /var/log/app/ 就能把某个目录下所有提到 timeout 的位置一次找齐。
只看到匹配行往往不够,报错的前因后果同样重要。-A n 显示匹配行和它后面的 n 行,-B n 显示前面的 n 行,-C n 前后都显示。查异常堆栈时常用 grep -C 5 "Exception" app.log,先把出错点连同上下文一起圈出来,再判断是偶发还是必现。
需要更灵活的匹配时用正则:^ 和 $ 分别锚定行首和行尾,. 表示任意一个字符,* 表示前面的内容重复任意次,[0-9] 这类括号表示字符范围。默认 grep 用基础正则,加 -E 切换到扩展正则后,可以直接用 +、? 和 |,比如 grep -E "error|failed|timeout" app.log 一次匹配多个关键词,省去跑三遍。
grep 的另一半威力在管道里:ps aux | grep nginx 查进程,journalctl -u sshd | grep -i "failed" 看登录失败记录。查进程时有个小坑:结果里会混进 grep 自己这一行,经典解法是把模式写成 grep "[n]ginx",匹配的是 nginx 本身、又不会匹配到方括号写法。
小结一下使用顺序:先用 -n 快速定位关键字,再用 -C 看上下文,最后用 -E 写更精确的过滤条件。把这三步练熟,大部分日志排查都可以在一分钟内锁定范围。

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

评论(0)

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

全部回复

上滑加载中

设置昵称

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

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

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