ack - 搜索多个模式(逻辑AND)

时间:2016-03-28 16:59:32

标签: regex perl ack

如何使用ack搜索文件以查找包含所有(或任何)已定义模式的行?

ANY(OR)很简单,例如:

ack 'pattern1|pattern2|pattern3'

但如何写 AND(ALL)?例如如何写以下内容:

if( $line =~ /pattern1/ && $line =~ /pattern2/ && $line =~ /pattern3/ ) {
    say $line
}

使用ack

或者更确切地说,可以使用logical and创建正则表达式吗?

3 个答案:

答案 0 :(得分:5)

 /foo/s && /bar/s && /baz/s

可以写成

 /^(?=.*?foo)(?=.*?bar)(?=.*?baz)/s

我们实际上并不需要预测最后一个。

 /^(?=.*?foo)(?=.*?bar).*?baz/s

由于我们不关心如果有多个模式的哪个实例匹配,我们可以将其简化为

 /^(?=.*foo)(?=.*bar).*baz/s

答案 1 :(得分:2)

最简单的解决方案是通过链接调用将渐进式过滤应用于db_2.mytable

ack

答案 2 :(得分:0)

我有一个类似的用例,我想查找包含多个模式但(可能)在不同行上的文件。

Startup

这使我可以找到一起使用2个库的文件。