如何在 grep 命令中运行多个 AND

如何在 grep 命令中运行多个 AND

我试图在 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。它必须是合法的正则表达式。

相关内容