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
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.
grep(1)
pagina man (digitaman 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.