如何查找包含特定单词(不在其名称中)的文本文件

Som*_*eMe 158 files text-processing

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

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

Ste*_*pel 247

您可以grep从终端使用命令:

 grep -r word *
Run Code Online (Sandbox Code Playgroud)

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

  • 星号与隐藏文件不匹配。要搜索所有文件,您可以运行``grep -r word .``。 (13认同)

hin*_*gev 73

安装 gnome-search-tool。

sudo apt-get install gnome-search-tool
Run Code Online (Sandbox Code Playgroud)

打开Search for files选择Select More Options


在此处输入图片说明

  • 不幸的是,`gnome-search-tool` 已从 ubuntu 中删除 (4认同)

Ser*_*nyy 16

这里概述了可用于搜索特定文本字符串的文件的不同方法,其中添加了一些专门用于仅处理文本文件并忽略二进制/应用程序文件的选项。

但是,应该注意,搜索单词可能会变得有点复杂,因为大多数行匹配工具会尝试在行中的任何位置查找单词。如果我们将一个单词作为字符串讨论,它可以出现在行首或行尾,或者单独出现在行上,或者被空格和/或标点符号包围 - 这就是我们需要正则表达式的时候,尤其是那些出现的来自 Perl。在这里,例如,我们可以使用-Pingrep来利用 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
Run Code Online (Sandbox Code Playgroud)

简单的grep

$ grep -rIH  'word'
Run Code Online (Sandbox Code Playgroud)
  • -r 用于从当前目录向下递归搜索
  • -I 忽略二进制文件
  • -H 输出找到匹配项的文件名

仅适用于搜索。

查找 + grep

$ find -type f -exec grep -IH 'word' {} \;
Run Code Online (Sandbox Code Playgroud)
  • find 递归搜索部分
  • -I 选项是忽略二进制文件
  • -H 输出找到行的文件名
  • 与子shell中的其他命令结合的好方法,例如:

    $ find -type f -exec sh -c 'grep -IHq "word" "$1" && echo "Found in $1"' sh {} \;
    
    Run Code Online (Sandbox Code Playgroud)

珀尔

$ 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
Run Code Online (Sandbox Code Playgroud)

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

这就是“bash方式”。不理想,可能没有充分的理由在您拥有grepperl安装时使用它。

$ grep -rIH  'word'
Run Code Online (Sandbox Code Playgroud)


小智 6

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