在Bash中搜索多个术语的文本文件的最有效方法

时间:2016-03-11 03:21:00

标签: bash grep

我正在编写一个正在文本文件中查找人名的bash脚本。在Bash中使用名称字典搜索文本文件的最有效方法是什么?

如果只有几个名字,我会这样做:

#!/bin/bash
namearray=(jon bob sue mary)

function findnames {
for name in ${namearray[@]}
do
  grep $name $filename
done
}

if [ ! -z findnames ]
then
echo "$filename has person name"
fi

但是,如果我试图在数百个文件中找到数百个名称,那么这似乎不是最有效的方法,或者Bash是不是?

1 个答案:

答案 0 :(得分:0)

" -f"选项是你的朋友。

如果名称列表在一个文件中(比如names.txt),每个名字都在一个单独的行上,那么你可以代替在names.txt中为每个$ name运行grep $name $filename,如你的例子所示可以运行grep -f names.txt $filename。您可能希望改为使用fgrep,并且可能希望包含其他选项(例如-w)。

如果名称列表不在文件中,那么您可能希望使用-f <( ... )形式来避免创建临时文件。