用acksearch多个模式(单词)?

我想在包含recursive directoriesfilesdirectory中search多个patterns

我知道grep命令如下

 grep -e '(pattern1)|(pattern2)' 

要么

 grep -r -E 'string1|string2|string3' /var/www/http 

对于使用ackag的命令是什么?

这应该够了:

 ack -R 'string1|string2' 

由于-R是默认值,所以可以忽略它:

 ack 'string1|string2' 

man ack

-r-R , – 递归

递归到子目录中。 这是默认的,只是在这里与grep兼容。 您也可以使用它来关闭 – 不散步。


如果你想从文件中获取模式,比如/path/to/patterns.file,你可以使用:

 ack "$(cat /path/to/patterns.file)" 

或平等地:

 ack "$(< /path/to/patterns.file)" 

我找不到与grep -f完全等价的内容。

对于ag ,从版本0.19.2开始,默认是递归搜索目录和文件。

要搜索多种模式,可以使用类似的语法作为ack

 ag 'pattern1|pattern2' 

将搜索pattern1pattern2

如果您不想递归搜索,可以通过开关 – --depth NUM将搜索深度设置为1

因此,

 ag 'pattern1|pattern2' --depth 1 

将只在当前目录中搜索这两种模式。