grep 命令入门
参考链接:Linux grep 命令详解 - 红尘过客2022 - 博客园
1. grep 是什么
grep 是一个强大的文本搜索工具,能够根据用户提供的正则表达式来筛选出包含特定模式的行
示例一:基本搜索
grep "error" /var/log/syslog
这个命令会打印 /var/log/syslog 文件中所有包含 error 字符串的行。
⚠️ 注意:默认情况下,grep 是区分大小写的。
2.常用选项详解
| 选项 | 含义 | 示例 |
|---|---|---|
| -i | 忽略大小写 | grep -i "error" file.log |
| -v | 反向匹配(显示不包含匹配项的行) | grep -v "success" file.log |
| -n | 显示行号 | grep -n "warning" file.txt |
-c |
统计匹配行的数量 | grep -c "404" access.log |
-l |
仅显示包含匹配项的文件名 | grep -l "TODO" *.py |
-h |
不显示文件名 | grep -h "INFO" *.log |
-r |
递归搜索目录 | grep -r "username" /home/ |
-E |
启用扩展正则表达式 | `grep -E "error |
-A N |
显示匹配行后 N 行 | grep -A 3 "timeout" log.txt |
-B N |
显示匹配行前 N 行 | grep -B 2 "exception" log.txt |
-C N |
显示匹配行前后各 N 行 | grep -C 1 "fatal" error.log |
-r递归搜索时,如果多个文件中有匹配,grep会自动在每一行前加上文件名和行号。
3.正则表达式入门
grep 默认使用的是基本正则表达式(BRE),而 egrep 或 grep -E 使用的是扩展正则表达式(ERE)。
常见正则符号说明:
| 符号 | 含义 | 示例 |
|---|---|---|
. |
匹配任意单个字符 | grep "a.c" file.txt → 匹配 abc, aac, a2c 等 |
* |
前一个字符出现 0 次或多次 | grep "go*gle" → 匹配 ggle, google, gooogle |
^ |
匹配行首 | grep "^start" → 匹配以 start 开头的行 |
| $ | 匹配行尾 | grep "end$" → 匹配以 end 结尾的行 |
[abc] |
匹配 a、b 或 c 中的一个字符 | grep "[0-9]" file.txt → 匹配数字 |
[^abc] |
匹配不是 a、b、c 的字符 | grep "[^0-9]" file.txt → 匹配非数字 |
\d、\w |
分别表示数字和单词字符(需启用 -P) |
grep -P "\d{3}" file.txt |
💡 提示:若要使用 Perl 兼容正则(PCRE),请加上 -P 参数,例如:
grep -P "\d{3}" file.txt
4.实战场景分析
场景一:过滤日志中的错误信息
grep -i "error" /var/log/syslog
增强版,显示上下文,这样可以查看错误发生前后的内容,便于排查问题。
grep -i -C 2 "error" /var/log/syslog
场景二:查找特定 IP 出现的所有日志
grep "192.168.1.100" /var/log/auth.log
高级用法:递归查找多个文件
grep -r "192.168.1.100" /var/log/
场景三:统计访问日志中某个接口被调用的次数
grep "/api/login" access.log | wc -l
更精确版本:忽略大小写 + 精确匹配
grep -i -w "/api/login" access.log | wc -l
场景四:批量替换文件内容(结合 sed)
grep -rl "old_string" /path/to/dir | xargs sed -i 's/old_string/new_string/g'
解释:
-r:递归搜索-l:只输出文件名xargs:将结果传给sedsed -i:就地修改文件
5.注意事项
✅ 总是使用 -i 来忽略大小写,避免漏掉关键信息。
✅ 使用 -r 时注意路径深度,避免误操作重要系统目录。
✅ 使用 grep -l 快速定位哪些文件包含关键词。
✅ 对敏感词匹配建议使用 -w 精确匹配整个单词。
✅ 处理大文件时建议配合 tail -f 或 less 查看进度。
✅ 若需高亮显示,请使用 --color=auto(Ubuntu/CentOS 支持)。
6.综合练习题
练习 1:
找出当前目录下所有 .txt 文件中包含 “important” 的行,并显示行号和文件名
grep -rn "important" *.txt
练习 2:
列出包含 “ERROR” 的文件名,不显示内容
grep -rl "ERROR" .
练习 3:
递归搜索 /etc/ 目录中包含 “root” 的配置文件,并统计数量
grep -rl "root" /etc/ | wc -l
练习 4:
显示匹配行及其前后 2 行内容,方便调试日志
grep -C 2 "segmentation fault" /var/log/syslog

记录Linux中grep命令常见参数选项,以及常见的案例,入门笔记
浙公网安备 33010602011771号