grep(Global Regular Expression Print)文本搜索工具,用于在文件或输入流中快速定位匹配指定模式(字符串或正则表达式)的行。


🔍 一、核心功能与语法

1. 核心能力

  • 文本搜索:快速匹配包含关键词的行。
  • 正则表达式支持:支持基本(BRE)和扩展正则(ERE,通过 -E),实现复杂模式匹配(如 IP 地址、邮箱格式)。
  • 递归搜索-r-R 选项可遍历目录及其子目录下所有文件。

⚙️ 二、常用选项详解

以下为高频选项分类说明:

1. 匹配控制

选项作用示例
-i忽略大小写grep -i "error" log.txt
-v反向匹配(排除行)grep -v "debug" log.txt
-w全词匹配grep -w "test" file.txt(不匹配"testing")
-o仅输出匹配部分grep -o "http://[^ ]*" url.txt(提取URL)

2. 输出格式化

选项作用示例
-n显示行号grep -n "TODO" code.py
-l仅显示文件名grep -rl "deprecated" /src
-c统计匹配行数grep -c "404" access.log
--color高亮匹配文本(默认启用)grep "warning" syslog

3. 上下文控制

选项作用示例
-A N显示匹配行N行grep -A 3 "crash" app.log
-B N显示匹配行N行grep -B 2 "timeout" app.log
-C N显示匹配行前后各N行grep -C 2 "exception" app.log

4. 正则表达式模式

  • 基本正则(BRE):默认支持 ^(行首)、$(行尾)、.(任意字符)、*(0次或多次)。
    grep "^2023" log.txt  # 匹配以"2023"开头的行
    
  • 扩展正则(ERE)-E 支持 +(1次或多次)、?(0或1次)、|(或逻辑)。
    grep -E "error|warn" log.txt  # 匹配含"error"或"warn"的行
    

🛠️ 三、典型应用场景

1. 日志分析

  • 提取错误信息grep "ERROR" app.log
  • 统计异常频率grep -c "Timeout" api.log
  • 查看错误上下文grep -C 5 "segfault" system.log(显示前后5行)。

2. 代码审查

  • 递归搜索函数调用grep -rn "calculate_score()" /src
  • 列出待修复文件grep -l "deprecated" *.js

3. 数据清洗

  • 提取结构化数据
    grep -Eo "[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}" access.log | sort | uniq -c`
    # 提取IP并统计出现次数
    
  • 过滤无效数据grep -v "N/A" dataset.csv > cleaned.csv

4. 系统监控

  • 实时日志过滤
    tail -f /var/log/syslog | grep --color "Failed login"
    

⚡️ 四、进阶技巧

1. 组合命令

  • find 联用:搜索特定扩展名文件内容
    find /var/log -name "*.log" -exec grep "oom_killer" {} +
    
  • 多条件管道过滤
    dmesg | grep "error" | grep -v "USB"  # 排除USB相关错误
    

2. 性能优化

  • 限制匹配数grep -m 100 "pattern" largefile.log(仅输出前100个匹配)。
  • 跳过二进制文件grep -I -r "text" /dir(避免解析二进制文件)。

3. 复杂正则

  • 匹配邮箱
    grep -Eo "\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z]{2,}\b" contacts.txt