grep
grep 命令基本用法(Global Regular Expression Print)
grep 是 Linux/Unix 下最常用、最强大的文本搜索工具,用于在文件或文本流中查找匹配模式(pattern)的行。
1. 基本语法
grep [选项] 模式 [文件...]
- 模式:可以是普通字符串,也可以是正则表达式。
- 文件:可以是一个或多个文件,也可以省略(从标准输入读取)。
2. 最常用选项
| 选项 | 含义 | 示例 |
|---|---|---|
-i | 忽略大小写 | grep -i "error" log.txt |
-r / -R | 递归搜索目录(含子目录) | grep -r "TODO" . |
-v | 反向匹配(显示不匹配的行) | grep -v "debug" app.log |
-n | 显示行号 | grep -n "function" script.sh |
-c | 只显示匹配的行数(计数) | grep -c "success" result.txt |
-l | 只显示包含匹配的文件名 | grep -l "error" *.log |
-w | 匹配整个单词 | grep -w "word" file.txt |
-o | 只显示匹配的部分(不是整行) | grep -o "http://[^ ]*" file.txt |
-E | 使用扩展正则(ERE),支持 `+ | () ` 等 |
-F | 固定字符串(不作为正则) | grep -F "[error]" log.txt |
-A n | 显示匹配行之后 n 行 | grep -A 3 "error" log.txt |
-B n | 显示匹配行之前 n 行 | grep -B 3 "error" log.txt |
-C n | 显示匹配行前后各 n 行 | grep -C 5 "error" log.txt |
--color=auto | 高亮显示匹配部分 | 通常放在 alias 中 |
3. 常用示例
# 1. 基本搜索
grep "hello" file.txt
# 2. 忽略大小写 + 显示行号
grep -in "error" app.log
# 3. 递归搜索当前目录及子目录
grep -r "TODO" .
# 4. 搜索多个文件
grep "main" *.c
# 5. 管道使用(最强大)
ps aux | grep "nginx"
cat /var/log/syslog | grep -i "failed"
# 6. 排除某些文件
grep -r --include="*.py" "def main" .
grep -r --exclude="*.log" "error" .
# 7. 正则表达式示例
grep "^#include" *.h # 以 #include 开头
grep -E "[0-9]{1,3}\.[0-9]{1,3}" log # 简单 IP 匹配
grep -oE "\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b" file.txt # 提取邮箱
4. 实用技巧
-
高亮颜色(推荐加入
~/.bashrc):alias grep='grep --color=auto' -
查找代码中特定函数:
grep -n "def " *.py # Pythongrep -n "^func " *.go # Go -
统计出现次数(按文件):
grep -c "pattern" *.log -
查找后实时监控日志:
tail -f app.log | grep --line-buffered "ERROR"
5. 常见组合
# 最常用组合(强烈推荐)
grep -rn "搜索内容" . --include="*.{js,ts,py,java}" --color
# 只看文件名
grep -rl "旧内容" . | xargs sed -i 's/旧内容/新内容/g'
提示:grep + find + xargs 是 Linux 下文本处理最强组合之一。