我认为 -H 总是应该在匹配的行之前打印文件名。这对于 grep 来说是正确的,但对于 bzgrep 来说则不然:
$ grep -H pattern file1
file1: data pattern data
$ bzgrep -H pattern file2.bz2
(standard input): data pattern data
有解决方法吗?我需要 grep 数百个 bz2 文件,在搜索之前我无法将它们全部解压缩...
答案1
据我所知,没有版本grep
在内部支持 gzip / bzip2。相反,存在诸如bzgrep
和之类的 shell 脚本zgrep
,它们本质上调用gunzip
/bunzip2
二进制文件并通过 stdin 将输出提供给 grep。因此,当您不直接调用 grep 时,该-H
标志无法按预期工作。
答案2
我查看了 bzgrep。它确实是 bash 脚本文件。为了修复这个问题而修改脚本非常简单,所以我想知道是否有人在新版本的 bzgrep 中更正了它。我发现,它在 Ubuntu 和 Debian 上得到了更正,但在 CentOS 上没有。
如果有人遇到同样的问题 - 只需登录到某个较新的系统,然后复制 bzgrep shell 脚本。这是最简单的解决方法。