阿杰,我给你整理一份 Linux grep
命令详解,包含概念、语法、常用选项、示例和进阶用法。
一、grep
命令概念
- 作用:在文件或标准输入中查找符合 指定模式(Pattern) 的文本行,并输出匹配结果。
- 特点:
- 支持正则表达式(基本、扩展、Perl 风格)
- 支持递归搜索
- 可显示匹配行、行号、文件名等
二、基本语法
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 电话格式
五、进阶技巧
- 管道结合 grep
ps aux | grep nginx
- 查找运行中的 nginx 进程
- 高亮显示匹配
grep --color=auto "error" log.txt
- 匹配多个关键词
grep -E "error|fail|warn" log.txt
- 忽略二进制文件
grep -I "TODO" *
- 显示匹配前后若干行
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 正则
- 技巧:
- 结合管道处理输出
- 使用正则表达式实现复杂搜索
- 高亮匹配和上下文显示便于调试日志
发表回复