![如何使用多个 AND 模式运行 zgrep?](https://linux22.com/image/203714/%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8%E5%A4%9A%E4%B8%AA%20AND%20%E6%A8%A1%E5%BC%8F%E8%BF%90%E8%A1%8C%20zgrep%EF%BC%9F.png)
我知道如何使用 执行此操作grep
,但该命令不适用于兹格列普
grep -E 'Pattern1.*Patter2' fileName
我在用着兹格列普匹配.json.gz
文件内的模式。
因为文件太大,我想BOTH
zgreppattern1和pattern2,顺序无关紧要。
可能实现吗?
答案1
grep
没有逻辑 AND 运算符。使用正则表达式 OR 运算符仍然可以获得相同的结果:
zgrep -E 'pattern1.*pattern2|pattern2.*pattern1' filename
答案2
我猜(但确实不清楚)您想要找到同时存在模式 1 和模式 2 的行,但顺序不限。
直接的解决方案是zcat FileName | grep -E pattern1 | grep -E pattern2
,但这意味着整个解压缩的文件将通过第一个管道传输。
如果确实处理了这个问题,并且文件中zgrep
只有有限数量的 出现,则可以工作。 (如果是最罕见的,您可能需要更换它们。)pattern1
zgrep -E pattern1 | grep -E pattern2
pattern2
@mashuptwice 给出的解决方案的答案将起作用,但取决于所涉及的困难,pattern1
并且pattern2
可能很难进入。
并没有解决这个问题:我想以任何顺序搜索两个字符串(但不受内存限制),并且发现perl -ale 'print if (/pattern1/ && /pattern2/)'
(大多数语言允许类似的东西,但我喜欢perl)是一个很好的解决方案。 (在你的情况下,你必须在脚本中处理解压)