Entendiendo grep y pipes en Linux

Entendiendo grep y pipes en Linux

Me encontré conestepublicación que explica mi problema. Supongamos que hay un archivo llamado file.txtque 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é grepque 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.txtes el contenido del archivo, que foo Worldse convierte en la entrada de grep? ¿Estoy en lo correcto? Si es así, pensé grepque 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.txtse 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 filese envía a través de STDOUT a grepSTDIN 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 filese puede dirigir el contenido grepa través de STDIN arriba.

información relacionada