3

私は最近egrepコマンドを頻繁に使用していますが(grepよりも優先されていないため)、完全には理解していない動作に気づきました。ホームディレクトリで次のコマンドを実行する egrep -r "main" * と、期待どおりに実行され、「main」を含むすべての行とそれぞれのファイルが返されます。

私が入った場合: egrep -r "main" そして最後に星を置くのを忘れたとしても、それは永遠にぶら下がっているようです。私は誰かがこれがなぜであり、それが何をしているのかについていくつかの光を当てることができるかもしれないことを望んでいますか?

ありがとう :)

4

3 に答える 3

7

マンページ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.
于 2013-02-01T20:52:56.987 に答える
4

grep(またはegrep)は、検索するファイルを知る必要があります。を含めること*で、現在のディレクトリ内のすべてのファイルを検索するように指示します。

を含めないと、*どこを見ればよいかわからないため、入力を待機し、検索するための入力を求めるプロンプトが表示されます(入力してから、Ctrl + Dを押して標準入力モードを終了します)。

この動作はgrepに固有のものではありません。入力を必要とするコマンドは、その入力がファイルまたは標準入力(stdin)からのものであることを望んでいます。

stdinデータはパイプから取得することも、コマンドを入力した後のプロンプトで手動で入力することもできます(これは、ハングしたと思ったときに表示されていたものです)。前述したように、Ctrl + Dを押すと、その入力モードが終了します。

于 2013-02-01T20:55:18.180 に答える
3

パスを指定しなかったため、grepstdinはデータを待機します。

パスの例:

egrep -r "pattern" .<-現在のディレクトリとサブディレクトリを検索

cat file | egrep "pattern"<-パイプからデータを検索

于 2013-02-01T20:52:12.743 に答える