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

  • En el grep(1) página de manual (escriba man 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.

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.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *