grep
是 Linux 中强大的文本搜索工具,用于在文件或标准输入中查找匹配指定模式的行。以下是详细的用法说明和常见示例:
grep [选项] "搜索模式" [文件...]
选项 | 作用 |
---|---|
-i |
忽略大小写 |
-v |
反向匹配(显示不包含模式的行) |
-n |
显示匹配行的行号 |
-c |
统计匹配的行数(不显示具体内容) |
-r 或 -R |
递归搜索目录中的文件 |
-l |
仅显示包含匹配项的文件名 |
-w |
全词匹配(避免部分匹配) |
-A NUM |
显示匹配行及其后NUM 行 |
-B NUM |
显示匹配行及其前NUM 行 |
-C NUM |
显示匹配行及其前后各NUM 行 |
-E |
启用扩展正则表达式(等同于 egrep ) |
-F |
按字面字符串匹配(禁用正则,等同于 fgrep ) |
基本搜索
在文件中查找包含 "error"
的行:
grep "error" /var/log/syslog
忽略大小写
搜索 "warning"
(不区分大小写):
grep -i "warning" file.txt
递归搜索目录
在当前目录及子目录中查找 "main()"
:
grep -r "main()" .
全词匹配
只匹配完整的单词 "word"
(避免匹配 "sword"
等):
grep -w "word" file.txt
显示行号
查找 "TODO"
并显示所在行号:
grep -n "TODO" project/*
统计匹配次数
统计文件中 "success"
出现的行数:
grep -c "success" report.log
反向匹配
显示不包含 "debug"
的行:
grep -v "debug" app.log
多文件搜索
在多个文件中查找 "config"
:
grep "config" file1.txt file2.conf
使用正则表达式
查找以 "192.168"
开头的 IP 地址:
grep -E "^192\.168" /var/log/auth.log
结合管道
过滤命令输出(例如查找正在运行的 nginx
进程):
ps aux | grep nginx
搜索多个模式(使用 -e
或 egrep
):
grep -e "error" -e "fail" log.txt
# 或使用扩展正则
egrep "error|fail" log.txt
排除特定文件(如不搜索 .log
文件):
grep -r "pattern" --exclude="*.log" /path/
仅显示匹配部分(而非整行):
grep -o "user_[0-9]*" data.txt
从文件读取模式(每行一个模式):
grep -f patterns.txt target_file
$
, *
, [
等),需用单引号或转义符(\
)包裹。--include
/--exclude
过滤文件类型。通过灵活组合选项和正则表达式,grep
可以高效处理日志分析、代码搜索等任务。