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

  • W grep(1) man (wpisz man 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.

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.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *