grep
是 Linux/Unix 系统中一个强大的文本搜索工具,其名称来源于 "Global Regular Expression Print"(全局正则表达式打印)。它的核心功能是通过正则表达式在文件中搜索指定模式,并输出匹配的行。
基础文本搜索
在文件或输入流中查找包含特定字符串的行:
grep "error" logfile.txt # 搜索文件中包含"error"的行
支持正则表达式
使用复杂模式匹配(如通配符、字符类、位置锚定等):
grep "^[A-Z]" file.txt # 搜索以大写字母开头的行
grep "foo.*bar" file.txt # 搜索包含"foo"后接任意字符再跟"bar"的行
递归搜索目录
通过 -r
参数递归搜索子目录:
grep -r "function" /path/to/code/ # 递归搜索目录中所有文件
统计匹配次数
使用 -c
统计匹配行的数量:
grep -c "warning" logfile.txt # 统计"warning"出现的次数
显示匹配行号
通过 -n
显示匹配行在文件中的行号:
grep -n "TODO" script.py # 显示"TODO"及其所在行号
反向匹配(排除)
用 -v
输出不匹配的行:
grep -v "success" results.log # 输出不包含"success"的行
忽略大小写
通过 -i
实现大小写不敏感搜索:
grep -i "hello" file.txt # 匹配"hello"、"Hello"、"HELLO"等
多模式匹配
用 -e
指定多个模式,或用 -E
启用扩展正则表达式(等效于 egrep
):
grep -e "error" -e "fail" log.txt # 搜索"error"或"fail"
grep -E "error|warn" log.txt # 使用扩展正则表达式
结合其他命令
常与管道(|
)联用,处理其他命令的输出:
ps aux | grep "nginx" # 查找nginx进程
cat /var/log/syslog | grep -i "error"
选项 | 作用 |
---|---|
-i |
忽略大小写 |
-v |
反向匹配(排除) |
-n |
显示行号 |
-c |
统计匹配次数 |
-r |
递归搜索目录 |
-l |
仅显示包含匹配的文件名 |
-w |
全词匹配(避免部分匹配) |
-A n |
显示匹配行及后n行 |
-B n |
显示匹配行及前n行 |
-C n |
显示匹配行前后各n行 |
查找代码中的函数调用:
grep -rn "main(" /path/to/src/
分析日志中的错误:
grep -A 2 -B 2 "CRITICAL" /var/log/app.log
过滤命令输出:
dmesg | grep -i "usb"
统计特定事件次数:
grep -c "404" /var/log/nginx/access.log
高亮匹配结果:
通过 --color=auto
高亮显示匹配文本(通常已默认启用)。
使用 -P
启用 Perl 正则(更强大的正则支持):
grep -P "\d{3}-\d{4}" file.txt # 匹配电话号码格式
结合 xargs
处理搜索结果:
grep -rl "deprecated" . | xargs sed -i 's/deprecated/updated/g'
grep
是 Linux 文本处理的瑞士军刀,熟练掌握它能极大提升日志分析、代码审查等任务的效率。