我想在硬盘上找到一个包含特定单词的文本文件。

在Ubuntu 12.4之前,我曾经以一个破折号启动一个应用程序,我认为它被称为“搜索文件。 ”,其图标是放大镜。我再也找不到那个简单的应用程序了。

#1 楼

您可以在终端上使用grep命令:

 grep -r word *


此命令将在当前目录(或子目录)下的所有文件中查找所有出现的“单词”。 br />

评论


星号与隐藏文件不匹配。要搜索所有文件,您可以运行grep -r word ..

–伊恩·麦金农
2012年4月29日在17:51

如果从外壳程序脚本调用grep,则搜索关键字可能不会突出显示,但是--color = auto标志可以解决该问题。

– noobninja
17年12月21日在20:45



#2 楼

安装gnome-search-tool。

sudo apt-get install gnome-search-tool


打开Search for files选择Select More Options



评论


您必须重新启动操作系统才能使其正常工作吗?还是在12天内不起作用?

– jcollum
13年4月18日在20:55

您是否已完成安装部分?我很确定它必须可以工作,并且可以在13.04上运行。

–辛格夫
13年4月19日在11:29

哪个gnome-search-tool = / usr / bin / gnome-search-tool ...但是当我在gnome中打开搜索选项(转到,搜索文件...)时,“选择更多选项”没有选项

– jcollum
13年4月19日在17:25

通过输入终端:gnome-search-tool打开,我确定您会看到它。

–辛格夫
13年4月20日在12:49

不幸的是,gnome-search-tool已从ubuntu中删除

–于罗吉格
19年9月18日在0:55

#3 楼

以下是可用于搜索文件以查找特定文本字符串的不同方法的概述,其中添加了一些专门用于仅使用文本文件而忽略二进制/应用程序文件的选项。

应注意但是,搜索单词可能会有些复杂,因为大多数行匹配工具都会尝试在行中的任何位置查找单词。如果我们谈论的单词是字符串,它可能出现在行的开头或结尾,或者单独出现在行中,或者被空格和/或标点符号包围-那时我们将需要正则表达式,尤其是那些来自Perl。例如,在这里,我们可以在-P中使用grep来利用Perl正则表达式将其包围。

$ printf "A-well-a don't you know about the bird?\nWell, everybody knows that the bird is a word" | grep -noP '\bbird\b'                                               
1:bird
2:bird


简单grep

$ grep -rIH  'word'




-r用于从当前目录向下搜索

-I忽略二进制文件

-H输出文件名,其中找到匹配项

仅适用于搜索。

查找+ grep

$ find -type f -exec grep -IH 'word' {} \;




/> find做递归搜索部分

-I选项是忽略二进制文件

-H输出找到行的文件名

结合subshel​​l中的其他命令,例如:

$ find -type f -exec sh -c 'grep -IHq "word" "" && echo "Found in "' sh {} \;



Perl

 #!/usr/bin/env perl
use File::Find;
use strict;
use warnings;

sub find_word{
    return unless -f;
    if (open(my $fh, $File::Find::name)){
        while(my $line = <$fh>){
            if ($line =~ /\bword\b/){
                printf "%s\n", $File::Find::name;
                close($fh);
                return;
            }
        }
    }
}

# this assumes we're going down from current working directory
find({ wanted => \&find_word, no_chdir => 1 },".")
 


递归bash脚本中的穷人递归grep

这是“ bash方式”。不理想,安装grepperl时可能没有充分的理由使用此功能。

 #!/usr/bin/env bash
shopt -s globstar
#set -x
grep_line(){
    # note that this is simple pattern matching 
    # If we wanted to search for whole words, we could use
    # word|word\ |\ word|\ word\ )
    # although when we consider punctuation characters as well - it gets more
    # complex
    case "" in
        *word*) printf "%s\n" "";;
    esac
}
readlines(){
    #  line count variable can be used to output on which line match occured

    #line_count=1
    while IFS= read -r line;
    do
        grep_line "$line" "$filename"
        #line_count=$(($line_count+1))
    done < ""
}

is_text_file(){
    # alternatively, mimetype command could be used
    # with *\ text\/* as pattern in case statement
    case "$(file -b --mime-type "")" in
        text\/*) return 0;;
        *) return 1;;
    esac
}

main(){
    for filename in ./**/*
    do
        if [ -f "$filename" ] && is_text_file "$filename"
        then
            readlines "$filename"
        fi
    done
}
main "$@"
 


#4 楼

问题很老...无论如何...
当前(2016年),有一个名为tracker的gnome应用程序(您可以在ubuntu存储库中找到),可以安装该应用程序以搜索文件中的文本(尝试odt-ods) -odp-pdf)。
该软件包随附其他4个要安装的软件包(tracker-extract,tracker-gui,tracker-miner-fs,tracker-utils)
Namastè:)

评论


Tracker是很好的软件,但是它要求索引已经包含有关您感兴趣的文件的信息,以便通过搜索将其击中。它使用的资源比Recoll少,我不确定索引的大小。但是,如果您需要搜索带有特定文本的文件并希望使用gui进行搜索,那么gnome-search-tool可以解决该问题而无需索引。在以前的Ubuntu版本中,它是默认应用程序,我不知道为什么他们没有替换就删除了它。

– Hatoru Hansou
16-9-27在1:25

#5 楼

是的,我知道您正在寻找gui应用程序,这是旧文章,但这可能对某人有所帮助。
我找到了ack-grep util。首先,通过sudo apt-get install ack-grep安装它,然后在要搜索的目录中运行命令ack-grep what_you_looking_for。这将显示所有包含文本的文件,并显示该文件的预览。这对我来说很重要。

#6 楼

更加简单快捷的是“银色搜索器” sudo apt-get install silversearcher-ag。请看一看https://github.com/ggreer/the_silver_searcher,以了解为什么它比ack *更好。

#7 楼

如果要搜索特定文件,可以指定通配符。

例如:
如果要查找所有包含单词SSLCertificateFile的* .conf文件,您可以在root用户上运行它:

sudo grep -rIH  'SSLCertificateFile' --include \*.conf