Natknąłem się na ten post wyjaśniający mój problem. Załóżmy, że istnieje plik o nazwie file.txt
, który zawiera „foo World”.
Odpowiedź wysłana przez Tylera wyjaśnia wiele, ale nie wiem, w jaki sposób
cat file.txt | grep "foo"
jest podobne do
grep "foo" file.txt
Myślałem, że grep
wymaga następujący
grep input argument // input is the string to search for (i.e) foo and // argument is the file path (./file.txt)
Teraz wynikiem cat file.txt
jest zawartość pliku, czyli foo World
to staje się wejściem grep
? Mam rację? Jeśli tak, pomyślałem, że grep
wymaga ścieżki pliku jako ciągu?
Komentarze
Odpowiedź
Większość poleceń obsługuje dane wejściowe to „albo plik, który muszą otworzyć w celu wprowadzenia danych, albo jako strumień danych przekazanych do polecenia przez STDIN.
Gdy zawartość cat file.txt
jest wysyłany do innego polecenia przez potok (|
), wyjście przez STDOUT, które jest przekazywane do potoku po lewej stronie, jest konfigurowane i przekazywane do polecenia, które „s po prawej stronie potoku” s STDIN.
Jeśli zawartość nie jest przekazywana przez STDOUT -> STDIN przez potok, polecenia mogą odbierać dane, otwierając pliki, które są przekazywane według nazwy przez argumenty wiersza poleceń.
Przykłady
Wysyła dane wyjściowe do STDOUT.
$ cat file 1 2 3 4 5
Dane wyjściowe z cat file
jest wysyłany przez STDOUT do grep
” s STDIN przez potok.
$ cat file | grep 5 5
Przetwarzanie pliku jako argumentu wiersza poleceń.
$ grep 5 file 5
Bezpośrednie przetwarzanie zawartości pliku przez STDIN.
$ grep 5 < <(cat file) 5
Tutaj ja „m demonstruje, że zawartość file
może być przekierowana do grep
przez STDIN powyżej.
grep(1)
man (wpiszman grep
), zobaczysz „grep [opcje] WZÓR [PLIK …]”. Fakt, że po „PLIKU” występuje „…” oznacza, że może istnieć wiele argumentów plikowych; fakt, że znajduje się on w nawiasach kwadratowych ([
…]
) oznacza, że argument plik jest opcjonalny (tzn. nie ma być dowolnym). Czytaj dalej, a zobaczysz „ Grep przeszukuje nazwane PLIKI wejściowe (lub standardowe wejście, jeśli żadne pliki nie są nazwane, lub nazwa pliku-
)… ”. Tak więc: jeśli nie określono żadnych plików, grep przeszukuje standardowe wejście.