为什么“ grep关键字”使终端永远待机?


25

当我在终端中键入“ grep doc”时,它什么也没做,在我使用Ctrl+ C或退出之前,停止终端执行任何其他操作Z

我知道这不是我应该使用grep的方式,但是很好奇为什么会这样。

Answers:


40

grep 默认情况下,如果未提供文件,则搜索标准输入:

grep搜索命名的输入文件(如果没有命名文件,或者如果给定单个连字符减号(-)作为文件名,则为标准输入),以查找包含与给定PATTERN匹配的行。默认情况下,grep打印匹配的行。

如果您只是这样做,则grep docgrep希望标准输入可以在其中进行搜索(不要在终端之间<>终端中输入部件,这些是注释):

$ grep doc
a b c <PRESS ENTER HERE>
doc <NO MATCH WAS FOUND IN PREVIOUS LINE, TYPE doc AND PRESS ENTER AGAIN>
doc <MATCH WAS FOUND>

6
OP也可以单独一行按Ctrl + D来结束grep“会话”。
凯文

2
好答案。只想说几乎没有人需要通过这样的打字使用grep笔记,但它可以让你管标准输出从之前的命令,这非常有用的。
Karl Bielefeldt 2015年

20
@KarlBielefeldt:实际上,这是调试复杂正则表达式的便捷方法。您可以运行类似的命令grep '([a-z]+[0-9]*.x){2,3}'并在键盘上键入一串示例行,以确保它与您认为的功能匹配。匹配的行将被回显,不匹配的行将不被回显。
Nate Eldredge 2015年

1
@NateEldredge:感谢您为此举一个实际的例子!我一直认为grep和cat之类的null-arg调用主要是理论上的。
迷宫2015年

1
@labyrinth它们根本不是理论,它们在管道somecommand | grep foo
传输

14

grep 正在等待输入。

来自man grep

[...]
DESCRIPTION
       grep  searches  the named input FILEs (or standard input if no files are named
[...]
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.