我正在编写一个正在文本文件中查找人名的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是不是?
答案 0 :(得分:0)
" -f"选项是你的朋友。
如果名称列表在一个文件中(比如names.txt),每个名字都在一个单独的行上,那么你可以代替在names.txt中为每个$ name运行grep $name $filename
,如你的例子所示可以运行grep -f names.txt $filename
。您可能希望改为使用fgrep,并且可能希望包含其他选项(例如-w)。
如果名称列表不在文件中,那么您可能希望使用-f <( ... )
形式来避免创建临时文件。