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
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.
grep(1)
manuálová stránka (zadejteman 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.