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