【问题标题】:Why doesn't grep work if a file is not specified?如果未指定文件,为什么 grep 不起作用?
【发布时间】:2012-11-10 07:45:48
【问题描述】:

我的 Linux grep 命令有问题,它不起作用!!!

我正在我的 Ubuntu 系统上尝试以下测试:

  1. 我创建了以下文件夹:/home/andrea/Scrivania/prova

  2. 在此文件夹中,我创建了一个名为 prova.txt 的 txt 文件,并在此文件中写入了字符串 test 并保存了它

  3. 在 shell 中,我首先访问了文件夹 /home/andrea/Scrivania/prova,因此我通过以下方式启动了 grep 命令:

    ~/Scrivania/prova$ grep test
    

问题是光标继续不停地闪烁,找不到任何东西!为什么?有什么问题?

【问题讨论】:

    标签: linux bash shell ubuntu grep


    【解决方案1】:

    您没有提供文件供 grep 命令扫描

    grep "test" *

    或递归

    grep -r "test" *

    【讨论】:

      【解决方案2】:

      因为如果没有给出文件,grep 会搜索标准输入。试试这个。

      grep test *
      

      【讨论】:

        【解决方案3】:

        您没有运行您正在寻找的命令。

        grep test * 将在您当前目录的所有文件中查找test

        grep test prova.txt 将在 prova.txt 中查找 test

        grep testgrep test 字符串在stdin 中,直到EOF 才会返回。)

        【讨论】:

          【解决方案4】:

          你需要向 grep 输入一些东西——你不能只调用 grep test 而没有任何其他参数,因为它实际上什么都不做。试试grep test *

          grep 的另一个用途是通过管道输入命令

          例如这是我的主目录:

          drwx------+  3 oliver  staff    102 12 Nov 21:57 Desktop
          drwx------+ 10 oliver  staff    340 17 Nov 18:34 Documents
          drwx------+ 17 oliver  staff    578 20 Nov 18:57 Downloads
          drwx------@ 12 oliver  staff    408 13 Nov 20:53 Dropbox
          drwx------@ 52 oliver  staff   1768 11 Nov 12:05 Library
          drwx------+  3 oliver  staff    102 12 Nov 21:57 Movies
          drwx------+  5 oliver  staff    170 17 Nov 10:40 Music
          drwx------+  3 oliver  staff    102 20 Nov 19:17 Pictures
          drwxr-xr-x+  4 oliver  staff    136 12 Nov 21:57 Public
          

          如果我跑了

          l | grep Do
          

          我得到结果

          drwx------+ 10 oliver  staff    340 17 Nov 18:34 Documents
          drwx------+ 17 oliver  staff    578 20 Nov 18:57 Downloads
          

          记住管道 grep 命令

          【讨论】:

          • 但她能做到,而且她做到了。当然,它正在做一些事情。它正在搜索标准输入,手动输入一些模式以测试它们是否匹配实际上非常有用。在空行上按^D (Ctrl-d) 以结束标准输入流和 grep。
          【解决方案5】:

          来自 grep 手册页:

          Grep 搜索命名的输入文件(如果没有文件,则搜索标准输入 是 命名或文件名 - 给定)用于包含与 给定模式。

          如果你不提供文件名供它使用,它会尝试从标准输入读取。

          试试grep test *

          【讨论】:

            【解决方案6】:

            根据GNU Grep 3.0

            名为- 的文件代表标准输入。如果没有指定输入, grep 搜索工作目录 . 如果给定命令行 指定递归的选项;否则,grep 搜索标准输入。

            所以对于 OP 的命令,在没有任何额外说明的情况下,grep 会尝试在标准输入中进行搜索,而标准输入中实际上并没有提供。

            一个简单的方法是grep -r [pattern],如上所述,用-r 指定recursion 并在当前目录和子目录中搜索。

            另请注意,通配符 * 仅包括文件,不包括目录。如果使用,可能会显示提示提示:

            grep: [directory_name]: 是一个目录

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2020-06-11
              • 2014-04-23
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多