【发布时间】:2018-02-20 15:31:29
【问题描述】:
我需要对一组文件(一些压缩文件,一些没有压缩文件)进行 grep 处理以获取特定模式。我知道 zgrep 可用于对压缩文件进行 grep,但正在运行的脚本依赖于具有不同逻辑的返回代码,用于返回代码 0、1 和其他任何内容。
grep 状态: 如果找到选定的行,则退出状态为 0,否则为 1。 2 如果发生错误。
zgrep 表示它的工作方式与 grep 相同,但可以处理压缩文件。
但是有 2 个文件:
#test1
hello
和
#test2
goodbye
都在同一个目录中
grep "hello" * 按预期返回 0,因为该模式在 test1 中找到
zgrep "hello" * 但是即使在 test1 中找到该模式,也会返回 1。它返回 1,因为在 test2 中找不到该模式。结果是,如果任何文件不匹配该模式,则返回 1,即使所有其他文件都匹配该模式。
就我而言,我只关心是否至少有 1 个文件匹配或没有文件匹配。如果有人这样做,有人不这样做,那应该算是成功。
那么有什么方法我可以在没有 zgrep 的情况下对压缩和解压缩的文件进行 grep 并获得正确的返回码,因为 zgrep 似乎有问题?
grep 版本:2.20
zgrep 版本:1.5
注意:如果没有长达数月的审批流程,我甚至系统管理员都无法更改这些版本号,因此请避免使用“更新您的东西”之类的解决方案
【问题讨论】:
-
你可以试试zipgrep。它依赖于
egrep和unzip,因此它应该具有与egrep相同的返回值。 -
@Aserre zipgrep 不幸的是仅适用于压缩文件,无法处理未压缩的文件。我需要一个可以同时处理的解决方案
-
请注意,this bug was fixed back in 2006。但是,您需要将您的东西“升级”到 gzip 的 1.3.5-14 版:/
-
另一种选择是为
zgrep使用-l标志,如我之前评论中的错误报告所示 -
@Aserre:使用
zgrep --version; zgrep (gzip) 1.6; Copyright (C) 2010-2013 Free Software Foundation, Inc.显示相同的行为。