grep
是 Linux 中强大的文本搜索工具,用于在文件或标准输入中查找匹配指定模式的行。以下是其核心用法和常见场景:
grep [选项] "搜索模式" [文件...]
选项 | 作用 |
---|---|
-i |
忽略大小写 |
-v |
反向匹配(显示不包含模式的行) |
-n |
显示匹配行的行号 |
-r 或 -R |
递归搜索目录中的文件 |
-l |
仅显示包含匹配项的文件名 |
-c |
统计匹配的行数(非次数) |
-w |
全词匹配(避免部分匹配) |
-A NUM |
显示匹配行及其后NUM 行(After) |
-B NUM |
显示匹配行及其前NUM 行(Before) |
-C NUM |
显示匹配行及其前后各NUM 行 |
-E |
启用扩展正则表达式(等同 egrep ) |
-F |
按字面字符串匹配(禁用正则,等同 fgrep ) |
--color=auto |
高亮匹配内容 |
# 在文件中搜索 "error"
grep "error" /var/log/syslog
# 忽略大小写搜索
grep -i "warning" file.txt
# 递归搜索当前目录下所有文件
grep -r "main()" .
# 仅显示包含匹配项的文件名
grep -rl "function" /path/to/dir
# 使用基础正则(匹配以"test"开头的行)
grep "^test" file.txt
# 使用扩展正则(匹配"error"或"warning")
grep -E "error|warning" file.log
# 匹配数字开头的行
grep "^[0-9]" data.txt
# 显示匹配行及其后3行
grep -A 3 "panic" system.log
# 显示匹配行及其前后各2行
grep -C 2 "timeout" debug.log
# 统计匹配的行数
grep -c "404" access.log
# 显示不包含"success"的行
grep -v "success" result.txt
# 搜索进程列表中的"nginx"
ps aux | grep nginx
# 搜索当前目录下的文件名(结合 `find`)
find . -type f | grep ".conf$"
多模式匹配:使用 -e
指定多个模式
grep -e "error" -e "fail" log.txt
从文件读取模式(-f
):
grep -f patterns.txt target.txt
高亮匹配(默认支持时):
grep --color=auto "keyword" file
静默模式(仅返回退出状态,用于脚本判断):
if grep -q "found" file.txt; then
echo "存在匹配"
fi
$
, *
, [
等)在正则中有特殊含义,需用 \
转义。bash
grep "price: \$100" file.txt
性能优化:大文件搜索时,可结合 -m NUM
限制匹配行数。
二进制文件:默认会输出二进制内容(可能乱码),用 -a
强制按文本处理。
掌握这些用法后,grep
可以高效处理日志分析、代码搜索等任务。如需更复杂的文本处理,可结合 awk
或 sed
使用。