阿杰,我给你整理一份 Linux grep 命令详解,包含概念、语法、常用选项、示例和进阶用法。


一、grep 命令概念

  • 作用:在文件或标准输入中查找符合 指定模式(Pattern) 的文本行,并输出匹配结果。
  • 特点
    1. 支持正则表达式(基本、扩展、Perl 风格)
    2. 支持递归搜索
    3. 可显示匹配行、行号、文件名等

二、基本语法

grep [选项] PATTERN [FILE...]

参数说明
PATTERN匹配模式,可以是字符串或正则表达式
FILE要搜索的文件,可以是多个文件
-i忽略大小写匹配
-v取反匹配(显示不匹配的行)
-r / -R递归搜索目录下的文件
-n显示行号
-l只显示包含匹配字符串的文件名
-c显示匹配行数
-E使用扩展正则表达式(egrep)
-P使用 Perl 正则表达式
--color高亮显示匹配部分

三、常用示例

1. 基本匹配

grep "hello" file.txt

  • 查找文件中包含 hello 的行

2. 忽略大小写

grep -i "hello" file.txt

3. 显示行号

grep -n "error" log.txt

  • 输出形式:行号:内容

4. 取反匹配

grep -v "DEBUG" log.txt

  • 显示不包含 DEBUG 的行

5. 递归搜索目录

grep -r "TODO" /home/user/project

6. 显示匹配文件名

grep -l "main" *.c

7. 统计匹配行数

grep -c "failed" log.txt


四、正则表达式示例

1. 基本正则

grep "^[0-9]" file.txt  # 以数字开头的行
grep "end$" file.txt    # 以 end 结尾的行

2. 扩展正则(-E)

grep -E "cat|dog" file.txt  # 匹配 cat 或 dog
grep -E "[a-z]{3}" file.txt  # 匹配连续三个小写字母

3. Perl 正则(-P)

grep -P "\b\d{3}-\d{4}\b" file.txt  # 匹配 123-4567 电话格式


五、进阶技巧

  1. 管道结合 grep
ps aux | grep nginx

  • 查找运行中的 nginx 进程
  1. 高亮显示匹配
grep --color=auto "error" log.txt

  1. 匹配多个关键词
grep -E "error|fail|warn" log.txt

  1. 忽略二进制文件
grep -I "TODO" *

  1. 显示匹配前后若干行
grep -C 3 "ERROR" log.txt  # 上下各显示3行
grep -B 2 "ERROR" log.txt  # 显示匹配前2行
grep -A 2 "ERROR" log.txt  # 显示匹配后2行


六、总结

  • grep 核心功能:按模式匹配文本
  • 常用组合
    • -i:忽略大小写
    • -v:取反
    • -r:递归
    • -n:显示行号
    • -E / -P:使用扩展或 Perl 正则
  • 技巧
    • 结合管道处理输出
    • 使用正则表达式实现复杂搜索
    • 高亮匹配和上下文显示便于调试日志