补充说明
zgrep 是 gzip 套件提供的脚本,先解压文件再把内容交给 grep,因此无需手动 zcat | grep。它支持 gzip 压缩文件,许多实现也能识别 bzip2、xz、lzma 等格式。除自身少量选项外,其余参数原样传给 grep。
用法与 grep 基本一致:可以搜索单个或多个文件,输出匹配行;使用 -l 只列出匹配的文件名,-c 统计匹配行数,-i 忽略大小写。压缩文件没有扩展名时,zgrep 仍会尝试按内容识别。
搜索日志归档时非常实用,例如在 /var/log/*.gz 中查找错误。注意 zgrep 不会修改文件,也不会递归目录(除非底层版本另外支持);需要遍历目录时可配合 find 和 xargs。
语法
zgrep [grep选项] 模式 [文件...]
选项
-i:忽略大小写。-c:只输出每个文件的匹配行数。-l:只输出包含匹配的文件名。-n:显示匹配行的行号。-v:输出不匹配的行。-E:使用扩展正则表达式。-F:按固定字符串匹配。-e 模式:显式指定模式,适合以-开头的模式。
实例
# 在单个压缩日志中搜索错误
zgrep -i error /var/log/syslog.1.gz
# 在多个归档中搜索并显示文件名
zgrep -H "timeout" /var/log/*.gz
# 只列出包含匹配的文件
zgrep -l "Out of memory" /var/log/*.gz
# 统计匹配行数
zgrep -c "Failed password" /var/log/auth.log.*.gz
# 配合 find 搜索所有压缩日志
find /var/log -name '*.gz' -exec zgrep -l 'panic' {} +
# 使用扩展正则
zgrep -E 'error|failed|denied' app.log.gz