我知道如何用grep来完成它,但是这个命令不适用于zgrep
grep -E 'Pattern1.*Patter2' fileName我使用zgrep来匹配.json.gz文件中的模式。
因为文件太大,我想要BOTH pattern1和pattern2,所以订单并不重要。
有可能实现吗?
发布于 2022-03-18 14:01:11
grep没有逻辑和运算符。仍然可以使用regex或操作符实现同样的结果:
zgrep -E 'pattern1.*pattern2|pattern2.*pattern1' filename发布于 2022-03-18 16:24:05
我想(但还不太清楚),您希望找到pattern1和pattern2都存在的行,但要按任何顺序排列。
直进解决方案是zcat FileName | grep -E pattern1 | grep -E pattern2,但这意味着整个解压缩文件将通过第一个管道传输。
如果zgrep确实处理了这个问题,并且文件中只出现了有限数量的pattern1,那么zgrep -E pattern1 | grep -E pattern2就可以工作。(如果pattern2是最罕见的,您可能需要切换它们。)
@ might两次给出的解决方案将有效,但取决于pattern1和pattern2中可能很难进入的困难。
没有回答这个问题:我想按任何顺序(但不受内存限制)搜索两个字符串,并且发现perl -ale 'print if (/pattern1/ && /pattern2/)' (大多数语言都允许类似的东西,但我喜欢perl)是一个很好的解决方案。(在您的情况下,您必须在脚本中处理解压)
https://unix.stackexchange.com/questions/695954
复制相似问题