linux grep命令怎么使用
`grep` 是 Linux 中最常用的文本搜索工具之一,用于在文件或标准输入中查找匹配指定模式的行。
## 基本语法
```bash
grep [选项] 模式 [文件...]
```
## 最常用的用法
### 1. 在文件中搜索
```bash
grep "hello" file.txt # 在 file.txt 中查找包含 hello 的行
grep "hello" file1.txt file2.txt # 在多个文件中查找
```
### 2. 从管道中搜索
```bash
ps aux | grep nginx # 查找 nginx 进程
cat file.txt | grep "error" # 从管道输入中搜索
```
### 3. 递归搜索目录
```bash
grep -r "TODO" ./src # 递归搜索 src 目录下所有文件
grep -rn "TODO" ./src # 递归并显示行号
```
## 常用选项
| 选项 | 说明 |
|------|------|
| `-i` | 忽略大小写 |
| `-v` | 反向匹配(显示不包含模式的行) |
| `-n` | 显示行号 |
| `-r` / `-R` | 递归搜索目录 |
| `-l` | 只显示匹配的文件名 |
| `-L` | 只显示不匹配的文件名 |
| `-c` | 只显示匹配的行数 |
| `-w` | 全词匹配 |
| `-E` | 使用扩展正则表达式(等同 egrep) |
| `-F` | 按固定字符串匹配(等同 fgrep) |
| `-o` | 只输出匹配的部分 |
| `-A n` | 显示匹配行及其后 n 行 |
| `-B n` | 显示匹配行及其前 n 行 |
| `-C n` | 显示匹配行及其前后各 n 行 |
| `--color=auto` | 高亮显示匹配内容 |
## 常见示例
```bash
# 忽略大小写搜索
grep -i "error" log.txt
# 显示行号
grep -n "main" code.c
# 反向匹配:显示不含 error 的行
grep -v "error" log.txt
# 统计匹配行数
grep -c "warning" log.txt
# 只列出包含匹配内容的文件名
grep -l "config" *.conf
# 全词匹配,避免匹配到 "helloworld"
grep -w "hello" file.txt
# 显示匹配行及后 3 行(常用于看日志上下文)
grep -A 3 "Exception" app.log
# 显示匹配行及前后各 2 行
grep -C 2 "failed" app.log
# 递归搜索并排除某些目录
grep -rn "TODO" . --exclude-dir=.git --exclude-dir=node_modules
```
## 正则表达式
```bash
# 基本正则(BRE)
grep "^root" /etc/passwd # 以 root 开头
grep "bash$" /etc/passwd # 以 bash 结尾
grep "a.b" file.txt # . 匹配任意单字符
# 扩展正则(-E)
grep -E "error|warning" log.txt # 匹配 error 或 warning
grep -E "[0-9]{3}" file.txt # 匹配 3 位数字
grep -E "^(foo|bar)" file.txt # 以 foo 或 bar 开头
```
## 实用技巧
```bash
# 搜索时高亮显示(很多系统已默认别名)
grep --color=auto "pattern" file
# 排除二进制文件
grep -I "text" *
# 结合 find 使用
find . -name "*.py" | xargs grep "import"
# 统计每个文件中的匹配次数
grep -rc "def " ./src
```
## 注意事项
- 模式中含空格或特殊字符时用引号包裹,如 `grep "hello world" file`
- 若模式以 `-` 开头,用 `--` 分隔,如 `grep -- "-foo" file`
- `-r` 和 `-R` 的区别:`-R` 会跟随符号链接,`-r` 默认不跟随
如果你有具体的使用场景(比如过滤日志、查找代码),可以告诉我,我帮你写出对应的命令。
- 点赞
- 收藏
- 关注作者
评论(0)