linux命令grep的实际应用
grep
是 Linux/Unix 系统中用于文本搜索的超级工具,其核心功能是使用正则表达式匹配文本行并输出结果。下面结合具体场景,展示其强大而实用的应用技巧:
一、基础搜索与过滤
快速定位文件内容:
grep "error" /var/log/syslog # 查找 syslog 中所有含 "error" 的行 grep -i "timeout" application.log # -i 忽略大小写,查找 "timeout"
统计匹配行数:
grep -c "404" access.log # 统计 access.log 中 404 错误出现的次数
二、高级搜索技巧
正则表达式匹配:
grep -E "[0-9]{3}-[0-9]{4}" data.txt # 查找形如 "123-4567" 的电话号码 grep -P "\d{2}:\d{2}:\d{2}" log.txt # -P 启用 PCRE 匹配时间格式 "HH:MM:SS"
递归搜索目录:
grep -r "functionName" /src # 递归搜索目录中所有文件 grep -r --include="*.py" "import" . # 仅搜索 .py 文件中的 "import"
反向搜索(排除匹配项):
grep -v "DEBUG" app.log # 排除所有含 "DEBUG" 的行(只显示非调试信息)
三、上下文查看(故障排查神器)
grep -C 3 "crash" system.log # 显示匹配行及其前后各3行
grep -A 2 "Starting service" log # 显示匹配行及之后2行
grep -B 1 "Connection closed" log # 显示匹配行及之前1行
场景示例: 快速查看服务启动失败时的上下文错误信息。
四、进程与命令结合
过滤命令输出:
ps aux | grep "[n]ginx" # 查找 Nginx 进程([n] 避免匹配自身) ifconfig | grep -E "inet [0-9.]+" # 提取所有 IP 地址
多条件组合搜索:
grep "error" log.txt | grep -v "warning" # 只含 error 不含 warning
五、文件批量处理
列出匹配文件:
grep -rl "deprecated" . # 搜索当前目录下包含 deprecated 的文件列表
代码重构辅助:
grep -rn "old_function(" . # 显示旧函数被调用的位置(文件名 + 行号)
六、进阶玩法
颜色标注匹配项:
grep --color=auto "TODO" code.py # 高亮显示 "TODO",便于视觉定位
只输出匹配部分:
echo "Date: 2023-08-01" | grep -o "[0-9-]\+" # 仅输出 "2023-08-01"
静默模式(用于脚本判断):
if grep -q "success" output.txt; thenecho "✅ Operation succeeded!" fi
经典排查场景实战
# 分析 Nginx 日志:筛选某 IP 的 POST 404 请求,显示前3后2行
grep -C '1.2.3.4.*POST.*404' /var/log/nginx/access.log | grep --color -E '404|$'
小贴士:
- 善用
| less -R
查看彩色输出(如grep --color | less -R
)- 复杂正则用
-P
(PCRE) 支持更丰富的语法(如\d
,\s
)- 大文件搜索时,可先用
head/grep
组合缩小范围(如grep -m 1000 ...
)
掌握这些技巧后,grep
会成为你在日志分析、代码审查、数据清洗等任务中的首选利器!