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),而 egrepgrep -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:将结果传给 sed
  • sed -i:就地修改文件

5.注意事项

✅ 总是使用 -i 来忽略大小写,避免漏掉关键信息。

✅ 使用 -r 时注意路径深度,避免误操作重要系统目录。

✅ 使用 grep -l 快速定位哪些文件包含关键词。

✅ 对敏感词匹配建议使用 -w 精确匹配整个单词。

✅ 处理大文件时建议配合 tail -fless 查看进度。

✅ 若需高亮显示,请使用 --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
posted @ 2025-08-21 14:16  月映冷香如你  阅读(31)  评论(0)    收藏  举报