Ik kwam deze post tegen die mijn probleem verklaart. Stel dat er een bestand is met de naam file.txt dat “foo World” bevat.
Het antwoord van Tyler legt veel uit, maar ik weet niet hoe

cat file.txt | grep "foo" 

is vergelijkbaar met

grep "foo" file.txt 

Ik dacht dat grep de volgende

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

Nu is de uitvoer van cat file.txt de inhoud van het bestand dat dit wordt de invoer van de grep? Ben ik correct? Als dat zo is, dacht ik dat grep een bestandspad als string nodig had?

Opmerkingen

  • In de grep(1) man-pagina (type man grep), je ziet “grep [options] PATROON [FILE …]”. Het feit dat “FILE” wordt gevolgd door “…” betekent dat er meerdere bestandsargumenten kunnen zijn; het feit dat het tussen vierkante haken staat ([]) betekent dat het bestandsargument optioneel is (dwz er is geen te zijn). Blijf lezen en u zult zien dat “ Grep zoekt in de benoemde invoerbestanden (of standaardinvoer als er geen bestanden zijn genoemd, of de bestandsnaam - is gegeven)…. ” Dus: als er geen bestanden zijn gespecificeerd, zoekt grep de standaardinvoer.

Answer

De meeste commandos kunnen omgaan met invoer die ofwel een bestand is dat ze moeten openen voor invoer, of als een gegevensstroom die via STDIN aan de opdracht wordt doorgegeven.

Wanneer de inhoud van cat file.txt wordt naar een ander commando gestuurd via een pijp (|) de output via STDOUT die naar de pijp aan de linkerkant wordt gestuurd, wordt ingesteld en gevoerd naar het commando dat “bevindt zich aan de rechterkant van de pijp” s STDIN.

Als de inhoud niet via STDOUT -> STDIN via een pijp wordt doorgegeven, kunnen commandos gegevens ontvangen door bestanden te openen die op naam worden doorgegeven via opdrachtregelargumenten.

Voorbeelden

Stuurt uitvoer naar STDOUT.

$ cat file 1 2 3 4 5 

Uitvoer van cat file wordt via STDOUT naar grep” s STDIN gestuurd via de pipe.

$ cat file | grep 5 5 

Het bestand verwerken als een opdrachtregelargument.

$ grep 5 file 5 

De inhoud van het bestand rechtstreeks verwerken via STDIN.

$ grep 5 < <(cat file) 5 

Hier ik “m om aan te tonen dat de inhoud van file kan worden omgeleid naar grep via STDIN hierboven.

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *