Dlaczego „słowo kluczowe grep” powoduje, że terminal pozostaje w gotowości na zawsze?

25

Kiedy wpisuję „grep doc” w terminalu, po prostu nic nie robię, powstrzymując terminal przed zrobieniem czegokolwiek innego, zanim ucieknę za pomocą Ctrl+ Club Z.

Wiem, że nie tak powinienem używać grep, ale po prostu ciekawe, dlaczego tak się dzieje.

Marzec3 kwietnia4
źródło

Odpowiedzi:

40

grep domyślnie wyszukuje standardowe dane wejściowe, jeśli nie podano żadnych plików:

grep przeszukuje nazwane PLIKI wejściowe (lub standardowe wejście, jeśli nie ma nazw plików lub jeśli jako nazwę pliku podano pojedynczy łącznik minus (-)) w poszukiwaniu linii zawierających dopasowanie do podanego WZORCA. Domyślnie grep drukuje pasujące linie.

Jeśli po prostu zrobisz grep docgrep oczekuje, że wejdzie standardowe wejście i będzie ono wyszukiwać w nim (nie wpisuj części pomiędzy <i >do terminala, to są komentarze):

$ 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
źródło
6
OP może również nacisnąć Ctrl + D na linii, aby zakończyć „sesję” grep.
Kevin
2
Dobra odpowiedź. Chciałem tylko zauważyć, że prawie nikt nigdy nie musi używać grep, wpisując tak, ale pozwala to na przesyłanie standardowych danych wyjściowych z poprzedniego polecenia, co jest bardzo przydatne.
Karl Bielefeldt
20
@KarlBielefeldt: W rzeczywistości jest to wygodny sposób na debugowanie skomplikowanych wyrażeń regularnych. Możesz uruchomić coś takiego grep '([a-z]+[0-9]*.x){2,3}'i wpisać kilka przykładowych linii na klawiaturze, aby upewnić się, że pasuje do tego, co myślisz, że działa. Linie, które pasują, zostaną powtórzone, linie, które nie będą.
Nate Eldredge
1
@NateEldredge: Dziękujemy za podanie praktycznego przykładu! Zawsze patrzyłem na bezimienne inwokacje takich rzeczy jak grep i cat jako głównie teoretyczne.
labirynt
1
@labyrinth W ogóle nie są teoretyczne, są używane cały czas przy orurowaniu, np.somecommand | grep foo
Barmar
14

grep czeka na dane wejściowe.

Od man grep:

[...]
DESCRIPTION
       grep  searches  the named input FILEs (or standard input if no files are named
[...]
AB
źródło