bzgrep -H pattern file.bz2 没有给出文件名,而是“标准输入”

bzgrep -H pattern file.bz2 没有给出文件名,而是“标准输入”

我认为 -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 脚本。这是最简单的解决方法。

相关内容