Me encontré con esta publicació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, estoy confundido en cuanto a cómo
cat file.txt | grep "foo"
es similar a
grep "foo" file.txt
Pensé que grep
requería el siguiendo
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 es foo World
esto se convierte en la entrada de grep
? ¿Estoy en lo correcto? Si es así, pensé que grep
requería una ruta de archivo como cadena.
Comentarios
Respuesta
La mayoría de los comandos pueden manejar entrada que es un archivo que necesitan abrir para entrada, o como 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 «se pasa a la tubería en el lado izquierdo, se configura y se envía al comando que «s en el lado derecho de la tubería» s STDIN.
Si el contenido no se pasa a través de STDOUT -> STDIN a través de una tubería, los comandos pueden recibir datos abriendo archivos que se pasan por nombre a través de argumentos de la línea de comando.
Ejemplos
Envía la salida a STDOUT.
$ cat file 1 2 3 4 5
Salida de cat file
se envía a través de STDOUT a grep
» s 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 a través de STDIN directamente.
$ grep 5 < <(cat file) 5
Aquí «m demostrando que el contenido de file
se puede dirigir a grep
a través de STDIN anterior.
grep(1)
página de manual (escribaman grep
), verá “grep [opciones] PATRÓN [ARCHIVO …]”. El hecho de que «FILE» vaya seguido de «…» significa que puede haber varios argumentos de archivo; el hecho de que esté entre corchetes ([
…]
) significa que el argumento del archivo es opcional (es decir, no tiene ser cualquiera). Continúe leyendo y verá « Grep busca los ARCHIVOS de entrada con nombre (o la entrada estándar si no hay ningún archivo con nombre, o el nombre de archivo-
se da) … » Entonces: si no se especifican archivos, grep busca la entrada estándar.