常用 grep 选项

  • grep:全称是 “Global Regular Expression Print”,意思是“全局正则表达式打印”。它的作用是搜索文本中匹配指定模式的行,并将这些行输出(打印)出来。
选项 含义 示例
-i 忽略大小写 grep -i "error" log.txt
-v 反向匹配(显示不包含指定模式的行) grep -v "success" log.txt
-n 显示匹配行的行号 grep -n "hello" file.txt
-r-R 递归搜索目录中的所有文件 grep -r "password" /home/user/
-l 只列出包含匹配项的文件名 grep -l "TODO" *.py
-c 显示匹配的行数(计数) grep -c "error" log.txt
-w 匹配整个单词(不是部分) grep -w "cat" file.txt(不会匹配 category
-E 使用扩展正则表达式(或用 egrep `grep -E “error
-A N 显示匹配行之后的 N 行 grep -A 2 "error" log.txt
-B N 显示匹配行之前的 N 行 grep -B 2 "error" log.txt
-C N 显示匹配行前后各 N 行(上下文) grep -C 3 "error" log.txt
--color 高亮显示匹配内容(很多系统默认开启) grep --color "key" file.txt

🧪 实际例子演示

假设文件 log.txt 内容如下:

1
2
3
4
5
2023-01-01 ERROR: Failed to connect
User logged in successfully
2023-01-01 WARNING: Disk space low
ERROR in module auth
Everything is fine

示例 1:忽略大小写 + 显示行号

1
grep -in "error" log.txt

输出:

1
2
1:2023-01-01 ERROR: Failed to connect
4:ERROR in module auth

示例 2:排除包含 “success” 的行

1
grep -v "success" log.txt

输出:

1
2
3
4
2023-01-01 ERROR: Failed to connect
2023-01-01 WARNING: Disk space low
ERROR in module auth
Everything is fine

示例 3:递归查找所有 .log 文件中包含 “ERROR” 的行

1
grep -r -i "ERROR" /var/log/*.log

示例 4:只看哪些文件包含 “TODO”

1
grep -l "TODO" *.py

输出可能:

1
2
app.py
utils.py

示例 5:匹配完整单词 “fail”,避免匹配 “failure”

1
grep -w "fail" log.txt

这样就不会把 failure 也算进去。

示例 6:显示匹配行及其前后 2 行(查看上下文)

1
grep -C 2 "ERROR" log.txt

输出会包括错误行以及它前后各两行,方便调试。


💡 小技巧

  • 组合使用:可以同时使用多个选项,比如:

    1
    grep -rin "error" /var/log/

    表示:递归、忽略大小写、显示行号地搜索所有 error

  • 配合管道使用:

    1
    ps aux | grep -i "nginx"

    查找进程中是否有 nginx(不区分大小写)。

  • 使用正则表达式:

    1
    grep -E "error|fatal|critical" log.txt

    搜索包含 errorfatalcritical 的行。