törmäsin tähän viestiin, joka selittää ongelmani. Oletetaan, että tiedostossa file.txt
on ”foo World”.
Tylerin lähettämä vastaus selittää paljon, mutta olen hämmentynyt siitä, kuinka
cat file.txt | grep "foo"
on samanlainen kuin
grep "foo" file.txt
Luulin, että grep
vaati seuraava
grep input argument // input is the string to search for (i.e) foo and // argument is the file path (./file.txt)
Nyt cat file.txt
-lähtö on tiedoston sisältö, joka on foo World
tästä tulee grep
? Olen oikeassa? Jos näin oli, luulin, että grep
vaatii tiedostopolun merkkijonona?
Kommentit
Vastaa
Useimmat komennot voivat käsitellä syötä se joko tiedosto, joka heidän on avattava syötettä varten, tai tietovirrana, joka on lähetetty komennolle STDIN: n kautta.
Kun cat file.txt
lähetetään toiselle komennolle putken kautta (|
) lähtö STDOUT: n kautta, joka on siirretty vasemmanpuoleiselle putkelle, asetetaan ja syötetään komennolle, joka ”putken oikealla puolella olevat” s STDIN.
Jos sisältöä ei välitetä STDOUT -> STDIN: n kautta putken kautta, komennot voivat vastaanottaa tietoja avaamalla tiedostoja, jotka välitetään nimellä. komentoriviargumentit.
Esimerkkejä
Lähetetään tulosteet STDOUT: lle.
$ cat file 1 2 3 4 5
Lähtö kohteesta cat file
lähetetään STDOUTin kautta grep
” s STDIN: lle putken kautta.
$ cat file | grep 5 5
Käsitellään tiedostoa komentoriviargumenttina.
$ grep 5 file 5
Käsitellään tiedoston sisältöä suoraan STDIN: n kautta.
$ grep 5 < <(cat file) 5
Täällä minä ”m osoittaa, että file
-sisältö voidaan ohjata osoitteeseen grep
yllä olevan STDIN: n kautta.
grep(1)
man -sivu (kirjoitaman grep
), näet ”grep [vaihtoehdot] MALLI [TIEDOSTO …]”. Se, että ”FILE”: n jälkeen seuraa ”…”, tarkoittaa, että tiedosto argumentteja voi olla useita; se, että se on hakasulkeissa ([
…]
) tarkoittaa, että tiedosto-argumentti on valinnainen (ts. siinä ei ole olla mikä tahansa). Jatka lukemista ja näet ” Grep etsii nimettyjä syötetiedostoja (tai vakiotuloa, jos tiedostoja ei ole nimetty, tai tiedoston nimeä-
annetaan). ” Joten: jos tiedostoja ei ole määritetty, grep etsii vakiotulosta.