首页 文章

如何使用grep在文件夹中查找单词?

提问于
浏览
423

在Windows中,我会搜索在文件夹中查找单词 . 同样,我想知道在包含许多子目录和文件的目录中是否出现特定单词 . 我对grep语法的搜索显示我必须指定文件名,即 grep string filename .

现在,我不知道文件名,所以我该怎么办?一位朋友建议做 grep -nr string ,但我不知道这意味着什么,我没有得到任何结果(在我发出ctrl c之前没有回应) .

11 回答

  • 3
    grep -nr 'yourString*' .
    

    最后的点搜索当前目录 . 每个参数的含义:

    -n            Show relative line number in the file
    'yourString*' String for search, followed by a wildcard character
    -r            Recursively search subdirectories listed
    .             Directory for search (current directory)
    

    grep -nr 'MobileAppSer*' . (会找到 MobileAppServlet.javaMobileAppServlet.classMobileAppServlet.txt ; 'MobileAppASer*.*' 是另一种做同样事情的方法 . )

    要检查更多参数,请使用 man grep 命令 .

  • 51

    grep -nr string my_directory

    附加说明:这满足语法 grep [options] string filename ,因为在类Unix系统中,目录是一种文件(有一个术语"regular file"专门指代在Windows中被称为"files"的实体) .

    grep -nr string 从标准输入中读取要搜索的内容,这就是为什么它只是等待你的输入,并在你按^ C时停止这样做(它也会停在^ D上,这是结束的关键组合 - 的文件) .

  • 4

    GREP :全局正则表达式打印/分析器/处理器/程序 .
    您可以使用它来搜索当前目录 .
    您可以为"recursive"指定-R,这意味着程序将搜索所有子文件夹及其子文件夹及其子文件夹的子文件夹等 .

    grep -R "your word" .
    

    -n 将打印文件中匹配的行号 .
    -i 将搜索不区分大小写(大写/非大写字母) .

    grep -inR "your regex pattern" .
    
  • 4

    还有:

    find directory_name -type f -print0 | xargs -0 grep -li word
    

    但这对初学者来说可能有点多了 .

    find 是通用目录walker / lister, -type f 表示"look for plain files rather than directories and named pipes and what have you", -print0 表示"print them on the standard output using null characters as delimiters" . find 的输出发送到 xargs -0 并以块的形式获取其标准输入(以避免命令行长度限制),使用空字符作为记录分隔符(而不是标准换行符),并将 grep -li word 应用于每组文件 . 在 grep 上, -l 表示"list the files that match"和 -i 表示"case insensitive";你通常可以组合单个字符选项,所以你会比 -l -i 更频繁地看到 -li .

    如果您不使用 -print0-0 ,那么您将遇到包含空格的文件名的问题,因此使用它们是一个好习惯 .

  • 102
    grep -nr search_string search_dir
    

    将执行RECURSIVE(意味着目录及其所有子目录)搜索search_string . (正如usta正确回答的那样) .

    你没有得到你朋友的建议的原因:

    grep -nr string
    

    是因为没有指定目录 . 如果您位于要进行搜索的目录中,则必须执行以下操作:

    grep -nr string .
    

    包含' . '很重要 . 字符,因为这告诉grep搜索这个目录 .

  • 637
    • grep -r "yourstring" * 会在任何文件和文件夹中找到"yourstring"

    现在,如果您想同时查找两个不同的字符串,则可以始终使用选项E并为搜索添加单词 . 休息后的例子

    • grep -rE "yourstring|yourotherstring|$" * 将搜索 yourstringyourotherstring 匹配的列表位置
  • 24

    为什么不进行递归搜索以查找子目录中的所有实例:

    grep -r 'text' *

    这就像一个魅力 .

  • 22

    我喜欢使用的另一个选项:

    find folder_name -type f -exec grep your_text  {} \;
    

    -type f只返回文件而不是文件夹

    -exec和{}在搜索中找到的文件上运行grep(确切的语法是“-exec command {}”) .

  • 0

    你选择的答案是好的,它可以工作,但这不是正确的方法,因为:

    grep -nr yourString* .
    

    这实际上会搜索字符串 "yourStrin""g" 0或多次 .

    所以正确的方法是:

    grep -nr \w*yourString\w* .
    

    此命令使用当前文件夹之前和之后的任何字符搜索字符串 .

  • 0

    不要使用grep . 下载Silver Searcherripgrep . 它们都非常出色,而且比grep或ack更快,有很多选择 .

  • 1

    与@eLRuLL发布的答案类似,指定符合字边界的搜索的更简单方法是使用 -w 选项:

    grep -wnr "yourString" .
    

相关问题