Jeg stødte på dette indlæg, der forklarer mit problem. Antag, at der er en fil, der hedder file.txt, som indeholder “foo World”.
Svaret fra Tyler forklarer meget, men jeg er forvirret over, hvordan

cat file.txt | grep "foo" 

svarer til

grep "foo" file.txt 

Jeg troede grep krævede følger

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

Nu er output fra cat file.txt indholdet af filen, der er foo World dette bliver input til grep? Har jeg ret? I så fald troede jeg grep krævede en filbane som en streng?

Kommentarer

  • I grep(1) man-side (skriv man grep), vil du se “grep [optioner] MØNSTER [FIL …]”. Det faktum, at “FILE” efterfølges af “…” betyder, at der kan være flere filargumenter; det faktum, at den er i firkantede parenteser ([]) betyder, at filargumentet er valgfrit (dvs. der er ikke at være nogen). Fortsæt med at læse, og du vil se “ Grep søger i de navngivne input-FILER (eller standardinput, hvis ingen filer er navngivet eller filnavnet - er givet) … ” Så hvis der ikke er angivet nogen filer, søger grep i standardindgangen.

Svar

De fleste kommandoer kan håndtere input, der enten er en fil, som de skal åbne for input, eller som en datastrøm, der sendes til kommandoen via STDIN.

Når indholdet af cat file.txt sendes til en anden kommando gennem et rør (|) output via STDOUT, som sendes til røret i venstre side, opsættes og føres til kommandoen, som “s på højre side af røret” s STDIN.

Hvis indholdet ikke sendes via STDOUT -> STDIN via et rør, kan kommandoer modtage data ved at åbne filer, der sendes ved navn via kommandolinjeargumenter.

Eksempler

Sender output til STDOUT.

$ cat file 1 2 3 4 5 

Output fra cat file sendes via STDOUT til grep” s STDIN via røret.

$ cat file | grep 5 5 

Behandling af filen som et kommandolinjeargument.

$ grep 5 file 5 

Behandler indholdet af filen direkte via STDIN.

$ grep 5 < <(cat file) 5 

Her jeg “m, der viser, at indholdet af file kan dirigeres til grep via STDIN ovenfor.

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *