GNU 和 BSD zgrep 输出的差异

GNU 和 BSD zgrep 输出的差异

我正在使用 zgrep 搜索模式并在多个 .gz 文件中的匹配行之后打印 N 行。

--在 BSD zgrep 中,我在每个文件后面看到一个分隔符:

zgrep (BSD grep) 2.5.1-FreeBSD
$ zgrep  "match string" -A 1 FileName1.log.gz FileName2.log.gz
FileName1.log.gz:match string
FileName1.log.gz-
--
FileName2.log.gz:match string
FileName2.log.gz-

但在 GNU 中我没有看到相同的情况:

zgrep (gzip) 1.6
Copyright (C) 2010-2013 Free Software Foundation, Inc.
This is free software.  You may redistribute copies of it under the terms of
the GNU General Public License <http://www.gnu.org/licenses/gpl.html>.
There is NO WARRANTY, to the extent permitted by law.

Written by Jean-loup Gailly.

# zgrep  "match string" -A 1 FileName1.log.gz FileName2.log.gz
FileName1.log.gz:match string
FileName1.log.gz:
FileName2.log.gz:match string
FileName2.log.gz:

我尝试了 --group-separator 但它似乎在单个文件中分隔匹配。

如何在 GNU zgrep 中获得类似的结果?

答案1

您无法使用 GNU zgrep(或 OpenBSD zgrep,这似乎是zgrepFreeBSD 和 macOS 上特有的)获得类似的输出。除非您自己对结果进行后处理,这很简单:

$ zgrep hello file*.gz | awk -F : 'NR > 1 && $1 != name { print "--" } { name = $1; print }'
file1.gz:hello world
--
file2.gz:hello world
--
file3.gz:hello world
--
file4.gz:hello world
--
file5.gz:hello world

zgrep这将通过一个简短的程序传递输出awk,只要该行的文件名位(第一个之前的位:)发生变化,该程序就会插入分隔符。

相关内容