
Me encontré conestepublicación que explica mi problema. Supongamos que hay un archivo llamado file.txt
que contiene "foo World".
La respuesta publicada por Tyler explica mucho, sin embargo, no sé cómo
cat file.txt | grep "foo"
es parecido a
grep "foo" file.txt
Pensé grep
que requería lo siguiente
grep input argument // input is the string to search for (i.e) foo and
// argument is the file path (./file.txt)
Ahora la salida de cat file.txt
es el contenido del archivo, que foo World
se convierte en la entrada de grep
? ¿Estoy en lo correcto? Si es así, pensé grep
que se necesitaba una ruta de archivo como una cadena.
Respuesta1
La mayoría de los comandos pueden manejar entradas que son un archivo que necesitan abrir para recibir entradas o un flujo de datos que se pasa al comando a través de STDIN.
Cuando el contenido de cat file.txt
se envía a otro comando a través de una tubería ( |
), la salida a través de STDOUT que pasa a la tubería en el lado izquierdo, se configura y se envía al comando que está en el lado derecho del STDIN de la tubería.
Si el contenido no se pasa a través de STDOUT -> STDIN a través de una tubería, entonces los comandos pueden recibir datos abriendo archivos que se pasan por nombre a través de argumentos de línea de comando.
Ejemplos
Envía salida a STDOUT.
$ cat file
1
2
3
4
5
La salida cat file
se envía a través de STDOUT a grep
STDIN a través de la tubería.
$ cat file | grep 5
5
Procesando el archivo como un argumento de línea de comando.
$ grep 5 file
5
Procesando el contenido del archivo directamente a través de STDIN.
$ grep 5 < <(cat file)
5
Aquí estoy demostrando que file
se puede dirigir el contenido grep
a través de STDIN arriba.