我在使用 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)
我错过了一些明显的东西吗?
是的。您正在 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 机器上的标准实用程序仍然很有用。grep
grep
“ripgrep”和“ack”是 grep 的另一个不错的替代品。