Jag stötte på det här inlägget som förklarar mitt problem. Anta att det finns en fil som heter file.txt som innehåller ”foo World”.
Svaret från Tyler förklarar mycket men jag är förvirrad över hur

cat file.txt | grep "foo" 

liknar

grep "foo" file.txt 

Jag trodde att grep krävde följande

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

Nu är utdata från cat file.txt innehållet i filen som är foo World detta blir ingången till grep? Har jag rätt? I så fall trodde jag att grep krävde en filväg som en sträng?

Kommentarer

  • I grep(1) man-sida (skriv man grep) ser du ”grep [optioner] MÖNSTER [FIL …]”. Det faktum att ”FILE” följs av ”…” betyder att det kan finnas flera filargument; det faktum att det finns inom hakparenteser ([]) betyder att filargumentet är valfritt (dvs. det finns inte att vara vilken som helst). Fortsätt läsa så ser du ” Grep söker i de namngivna inmatningsfilerna (eller standardinmatningen om inga filer heter, eller filnamnet - ges)…. ” Så: om inga filer anges, söker grep standardinmatningen.

Svar

De flesta kommandon kan hantera mata in antingen en fil som de behöver öppna för inmatning eller som en dataström som skickas till kommandot via STDIN.

När innehållet i cat file.txt skickas till ett annat kommando via ett rör (|) utgången via STDOUT som skickas till röret på vänster sida, ställs in och matas till kommandot som ”s till höger om röret” s STDIN.

Om innehållet inte skickas via STDOUT -> STDIN via ett rör kan kommandon ta emot data genom att öppna filer som skickas med namn via kommandoradsargument.

Exempel

Skickar utdata till STDOUT.

$ cat file 1 2 3 4 5 

Utdata från cat file skickas via STDOUT till grep” s STDIN via röret.

$ cat file | grep 5 5 

Bearbetar filen som ett kommandoradsargument.

$ grep 5 file 5 

Bearbetar innehållet i filen via STDIN direkt.

$ grep 5 < <(cat file) 5 

Här jag ”m visar att innehållet i file kan dirigeras till grep via STDIN ovan.

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *