在文件夹中查找文本的最快方法

时间:2009-12-30 02:28:07

标签: full-text-search awk grep solaris

我使用fgrep -s 'text' /folder/*.txt的返回值来查找'text'是否在任何 .txt 文件中< EM> /文件夹/ 。它有效,但我发现它对于我需要的东西来说太慢了,比如它在给我答案之前在所有文件中搜索'text'

当我找到至少一个带有'text'的文件时,我需要一些快速给我一个是/否答案的东西。可能是一些awk脚本。

3 个答案:

答案 0 :(得分:5)

如果我理解你的问题,你想要:

fgrep -m1

一场比赛后停止。

答案 1 :(得分:1)

如果是基于 mopoke 答案的类型,您可以使用它来缩短搜索范围。这会在找到它的第一个文件中的第一个匹配后停止:

# found=$(false)
found=1    # false
text="text"
for file in /folder/*.txt
do
    if fgrep -m1 "$text" "$file" > /dev/null
    then
        found=$?
        # echo "$text found in $file"
        break
    fi
done
# if [[ ! $found ]]
# then
#    echo "$text not found"
# fi
echo $found # or use exit $found

修改:注释掉一些行并进行了其他一些更改。

如果文件数量很多,那么for可能会失败,您应该使用while循环并将find传送到其中。

如果你想做的就是找出文件夹中是否有任何 .txt文件而不管文件的内容是什么,那么单独使用这样的东西:

find /folder -name "*.txt"

答案 2 :(得分:0)

基于上面的答案,我认为应该这样做吗?

find /folder -name \*.txt -exec grep "text" {}\;

但是我不确定我是否完全理解这个问题:'fgrep'是在开始输出之前进行全深度递归还是什么?该查找应报告as-it-found,因此可能更适合您的需求,dunno。

[编辑,未测试]:更改上面的'grep'以获取类似以下内容的shell脚本:

grep "text" && exit 0 || exit 1

要获得真正需要工作的错误(你需要解决这个问题,还没有完全按照这里的步骤进行测试 - 目前无法访问Unix :-()