Warum wird das Terminal durch "grep keyword" für immer bereit gehalten?

25

Wenn ich "grep doc" in das Terminal eingebe, tut es einfach nichts und hindert das Terminal daran, etwas anderes zu tun, bevor ich mit Ctrl+ Coder entkomme Z.

Ich weiß, dass ich Grep nicht so verwenden soll, aber ich bin nur neugierig, warum das passiert.

März3April4
quelle

Antworten:

40

grep Standardmäßig wird die Standardeingabe durchsucht, wenn keine Dateien angegeben sind:

grep durchsucht die benannten Eingabedateien (oder die Standardeingabe, wenn keine Dateien benannt sind oder wenn ein einzelner Bindestrich (-) als Dateiname angegeben ist) nach Zeilen, die eine Übereinstimmung mit dem angegebenen MUSTER enthalten. Standardmäßig druckt grep die übereinstimmenden Zeilen.

Wenn Sie dies einfach tun, grep docerwartet grep, dass die Standardeingabe kommt und darin sucht (geben Sie keine Teile zwischen <und >in das Terminal ein, dies sind Kommentare):

$ 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>
Arkadiusz Drabczyk
quelle
6
OP kann auch Strg + D in einer Zeile drücken, um die grep "Session" zu beenden.
Kevin
2
Gute Antwort. Just zu beachten wollte , dass so ziemlich niemand jemals von der Eingabe, so zu verwenden grep braucht, aber es ermöglicht es Ihnen, Rohrstandardausgabe von einem vorherigen Befehl, das ist sehr nützlich.
Karl Bielefeldt
20
@ KarlBielefeldt: Es ist eigentlich eine bequeme Möglichkeit, um komplizierte reguläre Ausdrücke zu debuggen. Sie können so etwas wie ausführen grep '([a-z]+[0-9]*.x){2,3}'und eine Reihe von Beispielzeilen auf Ihrer Tastatur eingeben, um sicherzustellen, dass sie Ihren Vorstellungen entsprechen. Übereinstimmende Zeilen werden wiedergegeben, nicht übereinstimmende Zeilen nicht.
Nate Eldredge
1
@NateEldredge: Danke für das praktische Beispiel! Ich hatte Null-Argument-Aufrufe von Dingen wie grep und cat immer als hauptsächlich theoretisch angesehen.
Labyrinth
1
@labyrinth Sie sind überhaupt nicht theoretisch, sie werden die ganze Zeit beim Piping verwendet, z. B.somecommand | grep foo
Barmar
14

grep wartet auf Eingabe.

Von man grep:

[...]
DESCRIPTION
       grep  searches  the named input FILEs (or standard input if no files are named
[...]
AB
quelle