在 BASH 中从外部文件 grep -f {patternfile} {source} 查找匹配模式的更快方法

在 BASH 中从外部文件 grep -f {patternfile} {source} 查找匹配模式的更快方法

在 *nix 终端 (Bash) 操作系统中,还有比使用此更快的方法来查找模式(或排除它们 - egrep -v 选项):

grep -f {patternfile} {source}

对于较大的文件,使用此选项的速度非常慢。

答案1

如果您的模式是固定字符串,请看看格列普下载)(或基于 Wu-Manber 算法的其他匹配器)。它将并行匹配所有模式。

Wu-Manber 通常适用于多达数十万个模式(可能一次推送一百万个)。

对于正则表达式,我认为没有普遍快速的方法。

答案2

您没有指定要搜索的文件类型,但我见过的另一种用于搜索的工具可能会给您带来更好的性能ack

但是,它不提供使用模式文件进行搜索的功能。但是,您可以使用这种方法来引导ack搜索多种模式,如下所示:

  $ grep -Ffx <(ack -l "pattern1" file) <(ack -l "pattern2" file)

这可以很容易地放入 Bash 脚本中,使其更通用。

相关内容