¿Por qué la "palabra clave grep" hace que el terminal permanezca en espera para siempre?

25

Cuando escribo "grep doc" en la terminal, simplemente no hace nada, lo que impide que la terminal haga otra cosa antes de escapar usando Ctrl+ Co Z.

Sé que no es así como se supone que debo usar grep, pero tengo curiosidad por saber por qué sucede esto.

Marzo3 abril4
fuente

Respuestas:

40

grep por defecto busca entradas estándar si no se proporcionan archivos:

grep busca en los ARCHIVOS de entrada con nombre (o en la entrada estándar si no se nombra ningún archivo, o si se da un solo guión menos (-) como nombre de archivo) en busca de líneas que contengan una coincidencia con el PATRÓN dado. Por defecto, grep imprime las líneas coincidentes.

Si solo hace grep docgrep espera que la entrada estándar venga y busque dentro de ella (no ingrese partes entre <y >en la terminal, estos son comentarios):

$ 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
fuente
66
OP también puede presionar Ctrl + D en una línea por sí mismo para finalizar la "sesión" grep.
Kevin
2
Buena respuesta. Solo quería señalar que casi nadie necesita usar grep escribiendo así, pero le permite canalizar la salida estándar de un comando anterior, lo cual es muy útil.
Karl Bielefeldt
20
@KarlBielefeldt: en realidad es una forma conveniente de depurar expresiones regulares complicadas. Puede ejecutar algo así grep '([a-z]+[0-9]*.x){2,3}'y escribir un montón de líneas de muestra en su teclado para asegurarse de que coincida con lo que cree que hace. Las líneas que coinciden tendrán eco, las líneas que no lo harán.
Nate Eldredge
1
@NateEldredge: ¡Gracias por dar un ejemplo práctico de esto! Siempre había considerado las invocaciones de argumentos nulos de cosas como grep y cat como principalmente teóricas.
laberinto
1
@labyrinth No son teóricos en absoluto, se usan todo el tiempo cuando se hacen tuberías, por ejemplosomecommand | grep foo
Barmar
14

grep está esperando la entrada.

De man grep:

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