Linux基础-grep入门使用

4/2/2026 linuxgrep

# grep 介绍

grep(Global Regular Expression Print)按正则模式在文件或标准输入里检索匹配行,是 Linux 上最常用的文本过滤工具之一。常与管道 |find、日志分析脚本配合;和 awksed 相比,grep 更专注「快速找行」,不做复杂字段运算。

# 基本用法

grep 模式 文件...
grep 模式                # 从标准输入读,如:cat a.log | grep ERROR
grep -e 模式 -e 模式2 文件   # 多个模式(或关系)
1
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

# 正则与扩展正则

基础正则(默认) 里不少元字符需要转义;扩展正则(-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

字面量搜索(密码、路径里含 .* 等时)用 -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 grepinfo grep,注意 macOS BSD grepGNU grep 在部分选项与正则细节上略有差异,跨平台脚本宜写兼容写法或用 grep -E 明确语法。

Last Updated: 4/3/2026, 3:45:50 AM