我试图在 grep 命令中运行多个 AND 组合,我能够使用两种模式运行:
grep -E 'pattern1.*pattern2' filename
是否可以使用上述方法使用三个或四个图案?
答案1
如果模式的顺序是固定的,那么您可以轻松使用,grep
如下所示:
grep -E 'pattern1.*pattern2.*pattern3'
但是,如果所有模式都必须存在并且它们可以以任何顺序出现,那么您就会得到组合复杂性;例如对于两种模式:
grep -E '(pattern1.*pattern2|pattern2.*pattern1)'
(对于三种模式,您已经有八种组合)。
在这种情况下(即使用 时grep
),最好在grep
每个模式一个实例的管道中级联调用:
grep pattern1 <infile | grep pattern2 | grep pattern3
每个实例将仅过滤与其模式匹配的行,并且总体结果将仅包含具有所有模式的行。
获得最清晰解决方案的更好方法是使用awk
:
awk '/pattern1/ && /pattern2/ && /pattern3/'
在这样的表达式中,顺序并不重要。
答案2
是的。您可以构造任何所需的正则表达式并将其用作命令中的模式grep
。它必须是合法的正则表达式。