Linux基础-grep入门使用
muyuanqiang7 4/2/2026 linuxgrep
# grep 介绍
grep(Global Regular Expression Print)按正则模式在文件或标准输入里检索匹配行,是 Linux 上最常用的文本过滤工具之一。常与管道|、find、日志分析脚本配合;和awk、sed相比,grep 更专注「快速找行」,不做复杂字段运算。
# 基本用法
grep 模式 文件...
grep 模式 # 从标准输入读,如:cat a.log | grep ERROR
grep -e 模式 -e 模式2 文件 # 多个模式(或关系)
1
2
3
2
3
默认打印整行;未匹配时退出码为 1,便于脚本判断是否存在某类日志。
# 常用选项
| 选项 | 含义 |
|---|---|
-i | 忽略大小写 |
-v | 反向匹配(打印不含模式的行) |
-n | 显示行号 |
-c | 只统计匹配行数 |
-l | 只列出包含匹配的文件名 |
-L | 只列出不含匹配的文件名 |
-r 或 -R | 递归目录(-R 跟随符号链接,行为依实现略有差异) |
-E | 使用扩展正则(ERE),等价于 egrep |
-F | 固定字符串匹配,避免特殊字符被当正则解释 |
--color=auto | 高亮匹配片段(多数发行版 grep 已别名带上颜色) |
-w | 整词匹配 |
-x | 整行匹配 |
指定上下文(排查日志时很有用):
grep -C 3 'timeout' app.log # 匹配行前后各 3 行
grep -A 5 'Exception' app.log # 匹配行及之后 5 行
grep -B 2 'error' app.log # 匹配行及之前 2 行
1
2
3
2
3
# 正则与扩展正则
基础正则(默认) 里不少元字符需要转义;扩展正则(-E) 写法更直观,例如 +、|、() 等一般无需再写反斜杠。
grep 'root\|daemon' /etc/passwd # BRE:或 常写作 \|(GNU grep)
grep -E 'root|daemon' /etc/passwd # ERE:推荐 `-E`
grep -E '^[0-9]{1,3}\.' data.txt # 行首数字与点
1
2
3
2
3
字面量搜索(密码、路径里含 .* 等时)用 -F:
grep -F '192.168.1.' hosts
1
# 实用示例
在目录中递归查找并带行号:
grep -RIn 'TODO' ./src
1
只统计包含 ERROR 的日志行数:
grep -c 'ERROR' /var/log/app.log
1
过滤掉注释与空行(示例:看配置):
grep -vE '^\s*#|^\s*$' /etc/nginx/nginx.conf
1
与 find 组合,只对部分文件 grep(示例:仅 .py):
find . -name '*.py' -print0 | xargs -0 grep -Hn 'import requests'
1
使用 glob 只搜某类文件(GNU grep):
grep -R --include='*.log' '5xx' /var/log/myapp
1
# 小结
grep 的核心是 正则 + 选项:日常记住 -E(扩展正则)、-F(固定字符串)、-i、-v、-n、-r 和 -C/-A/-B 已能覆盖大部分检索场景。需要更复杂的「按列、求和、关联统计」时,再结合 awk;需要就地改文件时用 sed。进阶可查 man grep 或 info grep,注意 macOS BSD grep 与 GNU grep 在部分选项与正则细节上略有差异,跨平台脚本宜写兼容写法或用 grep -E 明确语法。