grep 冻结

use*_*536 3 grep

我在使用 grep 时遇到问题,我在 Win 10 上安装了 ubuntu 18.04。它会冻结最简单的命令,我可以取消它,如果我愿意,它会创建一个新文件,但它不会写入任何内容它。

$ mkdir test
$ cd test
$ ls
$ sudo grep "Werk!" > new
^C
$ ls
new
$ cat new
Run Code Online (Sandbox Code Playgroud)

我错过了一些明显的东西吗?

Mar*_*erg 7

是的。您正在 grep'ing STDIN,因此它永远挂起,等待永远不会出现的输入。

您可能想包括“。” 作为 grep 和 -r (递归)的参数来 grep 当前目录。

grep -r hello .
Run Code Online (Sandbox Code Playgroud)

其他人也发现默认行为grep不太理想,因此您会发现一些grep替代方案不存在此问题。例如,Silver Searcher按名称查找ag,默认情况下递归搜索当前目录,因此您对正确语法的猜测是正确的ag

ag hello
Run Code Online (Sandbox Code Playgroud)

ag也默认为不区分大小写的搜索,除非您包含大写字母,这也可以说是您想要的。它还默认使用颜色并使用更强大的 PCRE 正则表达式引擎(如 Perl),而不是默认使用的较弱、较旧的 glob 样式匹配grep

像这样的可用性问题就是为什么您应该在可以且仅在必要时grep使用更新的替代方案的原因。了解您可能共享的 shell 脚本的标准工具以及您将登录的任何 Linux 机器上的标准实用程序仍然很有用。grepgrep

“ripgrep”和“ack”是 grep 的另一个不错的替代品。

  • 我认为如果也给出了“-r”(或“-R”)选项,“.”只会 grep 当前目录中的(文件)? (2认同)