最近我一直在使用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可以讓您擺脫這種輸入模式。