2013-02-01 37 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可以讓您擺脫這種輸入模式。

相關問題