003 grep命令
命令说明
grep 用于在文件中按模式(字符串/正则)搜索匹配的行并输出,是日志分析和文本检索的第一利器。名字来源于 g/re/p(globally search a regular expression and print)。
语法
grep [选项]... 模式 [文件]...
常用参数
| 参数 | 说明 |
|---|---|
| -i | 忽略大小写 |
| -v | 反向匹配,输出不包含模式的行 |
| -n | 显示匹配行的行号 |
| -c | 只输出匹配的行数 |
| -l | 只输出包含匹配内容的文件名 |
| -r / -R | 递归搜索目录下的所有文件 |
| -w | 整词匹配,如 grep -w cat 不会匹配 category |
| -E | 使用扩展正则(等价于 egrep),支持 |、+、() 等 |
| -A num | 显示匹配行之后的 num 行(After) |
| -B num | 显示匹配行之前的 num 行(Before) |
| -C num | 显示匹配行前后各 num 行(Context) |
| --color=auto | 匹配内容高亮显示 |
使用示例
$ grep "error" app.log
在 app.log 中查找包含 error 的行
$ grep -in "timeout" app.log
忽略大小写并显示行号
$ grep -c "ERROR" app.log
统计 ERROR 出现的次数
$ ps aux | grep nginx
查看 nginx 进程(经典管道用法)
$ grep -rn "listen_port" /etc/nginx/
在目录中递归搜索关键字并显示行号
$ grep -E 'ERROR|WARN' app.log
匹配 ERROR 或 WARN 两种模式
$ grep -v "^#" /etc/ssh/sshd_config
过滤掉注释行,查看有效配置
$ grep -C 3 "Exception" app.log
查看异常行前后各 3 行上下文
实用技巧
- grep 退出码:找到返回 0,找不到返回 1,出错返回 2,脚本中常用 if grep -q "pattern" file 判断文件是否包含某内容(-q 静默模式)。
- 搜索以 - 开头的内容时用 -- 分隔:grep -- "-abc" file,否则会被当作选项。
- 排除某目录:grep -rn --exclude-dir=node_modules "TODO" .。