「grepキーワード」が端末を永久に待機させるのはなぜですか?


25

ターミナルで「grep doc」と入力すると、何も実行されず、Ctrl+ Cまたはを使用してエスケープする前にターミナルが他の操作を実行できなくなりますZ

これがgrepの使用方法ではないことを知っていますが、なぜこれが起こっているのか興味があります。

回答:


40

grep ファイルが指定されていない場合、デフォルトで標準入力を検索します。

grepは、指定された入力ファイル(または、ファイルが指定されていない場合、または単一のハイフンマイナス(-)がファイル名として指定されている場合は標準入力)を検索します。デフォルトでは、grepは一致する行を出力します。

あなただけ行うとgrep doc来て、その中に検索するのgrepを期待標準入力を(間の部品入力しない<>、端末には、これらはコメントです):

$ grep doc
a b c <PRESS ENTER HERE>
doc <NO MATCH WAS FOUND IN PREVIOUS LINE, TYPE doc AND PRESS ENTER AGAIN>
doc <MATCH WAS FOUND>

6
OPは、単独で行でCtrl + Dを押して、grep「セッション」を終了することもできます。
ケビン

2
いい答えだ。ただ、ほとんど誰もが今までそのようなタイピングではgrepを使用する必要が音符に望んでいたが、それは前のコマンドからのパイプを標準出力にあなたを可能にある非常に便利。
カールビーレフェルト

20
@KarlBielefeldt:実際には、複雑な正規表現をデバッグするのに便利な方法です。次のようなものを実行grep '([a-z]+[0-9]*.x){2,3}'し、キーボードでサンプル行を入力して、思ったとおりに一致することを確認できます。一致する行はエコーされ、一致しない行はエコーされません。
ネイト・エルドリッジ

1
@NateEldredge:実用的な例を挙げてくれてありがとう!私は常に、grepやcatなどのnull-arg呼び出しを主に理論的なものと見なしていました。
ラビリンス

1
@labyrinth彼らはすべての理論的じゃない、彼らはすべての時間を使用しているとき、配管、例えばsomecommand | grep foo
Barmar

14

grep 入力を待っています。

からman grep

[...]
DESCRIPTION
       grep  searches  the named input FILEs (or standard input if no files are named
[...]
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.