Am dat peste acest post care explică problema mea. Să presupunem că există un fișier numit file.txt
care conține „foo World”.
Răspunsul postat de Tyler explică multe, totuși sunt confuz cu privire la modul
cat file.txt | grep "foo"
este similar cu
grep "foo" file.txt
Am crezut că grep
necesită urmând
grep input argument // input is the string to search for (i.e) foo and // argument is the file path (./file.txt)
Acum, ieșirea cat file.txt
este conținutul fișierului care este foo World
acesta devine intrarea grep
? Am dreptate? Dacă da, am crezut că grep
necesită un filepath ca șir?
Comentarii
Răspuns
Majoritatea comenzilor pot face față intrare care este fie un fișier pe care trebuie să îl deschidă pentru introducere, fie ca un flux de date care sunt transmise comenzii prin STDIN.
Când conținutul cat file.txt
este trimis către o altă comandă printr-o conductă (|
) ieșirea prin STDOUT care este trecută la conducta din partea stângă, este configurată și alimentată la comanda care „s pe partea dreaptă a conductei” s STDIN.
Dacă conținutul nu este transmis prin STDOUT -> STDIN printr-o conductă, atunci comenzile pot primi date prin deschiderea fișierelor care sunt transmise prin nume prin argumente pentru linia de comandă.
Exemple
Trimite ieșirea către STDOUT.
$ cat file 1 2 3 4 5
Ieșire din cat file
este trimis prin STDOUT către grep
” s STDIN prin conductă.
$ cat file | grep 5 5
Procesarea fișierului ca argument de linie de comandă.
$ grep 5 file 5
Prelucrarea directă a conținutului fișierului prin STDIN.
$ grep 5 < <(cat file) 5
Aici I „M demonstrez că conținutul file
poate fi direcționat către grep
prin STDIN de mai sus.
grep(1)
pagina manuală (tastațiman grep
), veți vedea „grep [options] PATTERN [FILE …]”. Faptul că „FILE” este urmat de „…” înseamnă că pot exista mai multe argumente pentru fișiere; faptul că este între paranteze drepte ([
…]
) înseamnă că argumentul fișierului este opțional (adică nu există a fi oricare). Continuați să citiți și veți vedea „ Grep caută fișierele de intrare denumite (sau intrarea standard dacă nu sunt denumite fișiere sau numele fișierului-
este dat) … ” Deci: dacă nu sunt specificate fișiere, grep caută intrarea standard.