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" .。