最近我一直在使用egrep命令(刚刚优先于grep),并且我注意到了一个我不完全了解的行为。 当我在我的主目录中运行以下命令: egrep -r "main" *
它做我所期望的并返回包含“main”的所有行和相应文件。当没有添加目录或文件时,grep会做什么
虽然如果我输入: egrep -r "main"
并忘记把明星放在最后,它似乎只是永远挂起。 我希望有人能够阐明为什么这是,它在做什么?
谢谢:)
最近我一直在使用egrep命令(刚刚优先于grep),并且我注意到了一个我不完全了解的行为。 当我在我的主目录中运行以下命令: egrep -r "main" *
它做我所期望的并返回包含“main”的所有行和相应文件。当没有添加目录或文件时,grep会做什么
虽然如果我输入: egrep -r "main"
并忘记把明星放在最后,它似乎只是永远挂起。 我希望有人能够阐明为什么这是,它在做什么?
谢谢:)
它等待输入从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.
你没有提供路径,以便grep的等待上stdin
数据。
例与路径:
egrep -r "pattern" .
< - 在当前目录下搜索和子目录
cat file | egrep "pattern"
< - 在数据搜索从管
grep(或egrep)需要知道要搜索的文件。通过包含*
,您告诉它搜索当前目录中的所有文件。
如果您不包括*
,它不知道在哪里看,所以它会等待您的输入,并提示您输入以进行搜索(键入它,然后按ctrl + d结束标准输入模式)。
此行为对于grep不是唯一的。任何需要输入的命令都需要输入来自文件或来自标准输入(stdin)。
标准输入数据可以来自管道,也可以在输入命令(这是您认为挂起时看到的内容)时,在提示时手动输入。正如我所提到的,按Ctrl + D可以让您摆脱这种输入模式。