2013-02-01 100 views
2

最近我一直在使用egrep命令(刚刚优先于grep),并且我注意到了一个我不完全了解的行为。 当我在我的主目录中运行以下命令: egrep -r "main" * 它做我所期望的并返回包含“main”的所有行和相应文件。当没有添加目录或文件时,grep会做什么

虽然如果我输入: egrep -r "main" 并忘记把明星放在最后,它似乎只是永远挂起。 我希望有人能够阐明为什么这是,它在做什么?

谢谢:)

回答

5

它等待输入从stdin,因为你没有指定文件名,从grep联机帮助页:

NAME 
    grep, egrep, fgrep - print lines matching a pattern 

SYNOPSIS 
    grep [options] PATTERN [FILE...] 
    grep [options] [-e PATTERN | -f FILE] [FILE...] 

DESCRIPTION 
    Grep searches the named input FILEs (or standard input if no files are named, or the file name - is given) for lines containing a match to the given PATTERN. By default, grep 
    prints the matching lines. 
3

你没有提供路径,以便grep的等待上stdin数据。

例与路径:

egrep -r "pattern" . < - 在当前目录下搜索和子目录

cat file | egrep "pattern" < - 在数据搜索从管

4

grep(或egrep)需要知道要搜索的文件。通过包含*,您告诉它搜索当前目录中的所有文件。

如果您不包括*,它不知道在哪里看,所以它会等待您的输入,并提示您输入以进行搜索(键入它,然后按ctrl + d结束标准输入模式)。

此行为对于grep不是唯一的。任何需要输入的命令都需要输入来自文件或来自标准输入(stdin)。

标准输入数据可以来自管道,也可以在输入命令(这是您认为挂起时看到的内容)时,在提示时手动输入。正如我所提到的,按Ctrl + D可以让您摆脱这种输入模式。

相关问题