如何使用多个 AND 模式运行 zgrep?

如何使用多个 AND 模式运行 zgrep?

我知道如何使用 执行此操作grep,但该命令不适用于兹格列普

grep -E 'Pattern1.*Patter2' fileName

我在用着兹格列普匹配.json.gz文件内的模式。
因为文件太大,我想BOTHzgreppattern1pattern2,顺序无关紧要。

可能实现吗?

答案1

grep没有逻辑 AND 运算符。使用正则表达式 OR 运算符仍然可以获得相同的结果:

zgrep -E 'pattern1.*pattern2|pattern2.*pattern1' filename

答案2

我猜(但确实不清楚)您想要找到同时存在模式 1 和模式 2 的行,但顺序不限。

直接的解决方案是zcat FileName | grep -E pattern1 | grep -E pattern2,但这意味着整个解压缩的文件将通过第一个管道传输。

如果确实处理了这个问题,并且文件中zgrep只有有限数量的 出现,则可以工作。 (如果是最罕见的,您可能需要更换它们。)pattern1zgrep -E pattern1 | grep -E pattern2pattern2

@mashuptwice 给出的解决方案的答案将起作用,但取决于所涉及的困难,pattern1并且pattern2可能很难进入。

并没有解决这个问题:我想以任何顺序搜索两个字符串(但不受内存限制),并且发现perl -ale 'print if (/pattern1/ && /pattern2/)'(大多数语言允许类似的东西,但我喜欢perl)是一个很好的解决方案。 (在你的情况下,你必须在脚本中处理解压)

相关内容