Linux 中的 grep
用法详解
grep
是 Linux 中强大的文本搜索工具,用于在文件或输入流中查找匹配指定模式的行。其基本语法为:
grep [选项] "模式" [文件]
核心功能
基础搜索
在文件中查找包含特定字符串的行:grep "error" log.txt # 搜索 log.txt 中所有含 "error" 的行
正则表达式搜索
支持正则表达式匹配(需用-E
或egrep
):grep -E "404|500" access.log # 查找 HTTP 状态码为 404 或 500 的行
常用选项
选项 | 作用 | 示例 |
---|---|---|
-i | 忽略大小写 | grep -i "warning" system.log |
-v | 反向匹配(排除模式) | grep -v "success" result.csv |
-r | 递归目录搜索 | grep -r "function" /src/code/ |
-n | 显示行号 | grep -n "TODO" main.py |
-c | 统计匹配行数 | grep -c "login" auth.log |
-w | 全词匹配 | grep -w "port" config.ini |
-A | 显示匹配行后 N 行 | grep -A 2 "crash" debug.log |
-B | 显示匹配行前 N 行 | grep -B 1 "timeout" trace.out |
实用技巧
管道组合
与其他命令配合使用:ps aux | grep "nginx" # 查找 Nginx 进程 cat data.json | grep "id" # 从 JSON 中提取含 "id" 的行
多文件搜索
支持同时搜索多个文件:grep "deprecated" *.js # 在所有 JS 文件中查找
正则进阶
使用特殊符号:grep "^2023" dates.log # 查找以 2023 开头的行 grep "end$" script.sh # 查找以 "end" 结尾的行
注意:
- 特殊字符(如
$
,*
,[
)需用单引号包裹:grep '\$PATH' .bashrc
- 复杂正则建议用
egrep
或grep -E
典型场景
# 在日志中查找错误并显示前后 3 行
grep -C 3 "segmentation fault" /var/log/syslog# 统计代码中特定函数调用次数
grep -r -c "calculate(" /project/src/# 过滤注释行(排除以 # 开头的行)
grep -v "^#" config.conf