Mi sono imbattuto in questo post che spiega il mio problema. Supponiamo che ci sia un file chiamato file.txt che contiene “foo World”.
La risposta pubblicata da Tyler spiega molto, ma sono confuso su come

cat file.txt | grep "foo" 

è simile a

grep "foo" file.txt 

Pensavo che grep richiedesse il seguente

grep input argument // input is the string to search for (i.e) foo and // argument is the file path (./file.txt) 

Ora loutput di cat file.txt è il contenuto del file che è foo World questo diventa linput del grep? Ho ragione? Se è così, pensavo che grep richiedesse un percorso file come stringa?

Commenti

  • Nel grep(1) pagina man (digita man grep), vedrai “grep [opzioni] PATTERN [FILE …]”. Il fatto che “FILE” sia seguito da “…” significa che possono esserci più argomenti di file; il fatto che sia racchiuso tra parentesi quadre ([]) significa che largomento file è facoltativo (cioè non ci sono essere qualsiasi). Continua a leggere e vedrai che “ Grep cerca i FILE di input con nome (o lo standard input se nessun file è denominato, o il nome di file - è dato)…. ” Quindi: se non viene specificato alcun file, grep ricerca lo standard input.

Risposta

La maggior parte dei comandi può gestire input che “è un file che devono essere aperti per linput, o un flusso di dati che viene passato al comando tramite STDIN.

Quando il contenuto di cat file.txt viene inviato a un altro comando tramite una pipe (|) loutput tramite STDOUT che è passato alla pipe sul lato sinistro, viene impostato e inviato al comando che “s sul lato destro della pipe” s STDIN.

Se il contenuto non viene passato tramite STDOUT -> STDIN tramite una pipe, i comandi possono ricevere dati aprendo file che vengono passati per nome tramite argomenti della riga di comando.

Esempi

Invia loutput a STDOUT.

$ cat file 1 2 3 4 5 

Output da cat file viene inviato tramite STDOUT a grep” s STDIN tramite pipe.

$ cat file | grep 5 5 

Elaborazione del file come argomento della riga di comando.

$ grep 5 file 5 

Elaborazione del contenuto del file direttamente tramite STDIN.

$ grep 5 < <(cat file) 5 

Qui io “sto dimostrando che i contenuti di file possono essere indirizzati a grep tramite STDIN sopra.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *