Narazil jsem na tento příspěvek, který vysvětluje můj problém. Předpokládejme, že existuje soubor s názvem file.txt, který obsahuje „foo World“.
Odpověď zveřejněná Tylerem hodně vysvětluje, nicméně jsem zmatený, jak

cat file.txt | grep "foo" 

je podobný

grep "foo" file.txt 

Myslel jsem, že grep vyžaduje následující

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

Nyní je výstupem cat file.txt obsah souboru, který je foo World toto se stane vstupem grep? Mám pravdu? Pokud ano, myslel jsem si, že grep vyžaduje cestu souboru jako řetězec?

Komentáře

  • V grep(1) manuálová stránka (zadejte man grep), uvidíte „grep [options] PATTERN [FILE …]“. Skutečnost, že za „SOUBOREM“ následuje „…“, znamená, že může existovat více argumentů souboru; skutečnost, že je v hranatých závorkách ([]) znamená, že argument souboru je volitelný (tj. nemá být libovolný). Pokračujte ve čtení a uvidíte „ Grep prohledává pojmenované vstupní SOUBORY (nebo standardní vstup, pokud nejsou pojmenovány žádné soubory, nebo název souboru - je uvedeno)…. “ Takže: pokud nejsou zadány žádné soubory, grep prohledá standardní vstup.

Odpověď

Většina příkazů si poradí s zadejte, že jde buď o soubor, který je třeba otevřít pro vstup, nebo jako proud dat, která jsou předána příkazu prostřednictvím STDIN.

Když je obsah cat file.txt je odeslán na jiný příkaz potrubím (|), výstup přes STDOUT, který je předán kanálu na levé straně, je nastaven a přiváděn k příkazu, který „s na pravé straně kanálu“ s STDIN.

Pokud se obsah nepředává prostřednictvím STDOUT -> STDIN prostřednictvím kanálu, pak příkazy mohou přijímat data otevřením souborů, které jsou předávány podle jména prostřednictvím argumenty příkazového řádku.

Příklady

Odesílá výstup do STDOUT.

$ cat file 1 2 3 4 5 

Výstup z cat file je odeslán přes STDOUT na grep“ s STDIN prostřednictvím kanálu.

$ cat file | grep 5 5 

Zpracování souboru jako argument příkazového řádku.

$ grep 5 file 5 

Zpracování obsahu souboru přímo přes STDIN.

$ grep 5 < <(cat file) 5 

Tady „m prokazující, že obsah file lze přesměrovat na grep pomocí STDIN výše.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *