Jeg kom over dette innlegget som forklarer problemet mitt. Anta at det er en fil kalt file.txt som inneholder «foo World».
Svaret skrevet av Tyler forklarer mye, men jeg er forvirret over hvordan

cat file.txt | grep "foo" 

ligner på

grep "foo" file.txt 

Jeg trodde grep krevde følger

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

Nå er utdata fra cat file.txt innholdet i filen som er foo World dette blir inngangen til grep? Har jeg rett? I så fall trodde jeg grep krevde en filbane som en streng?

Kommentarer

  • I grep(1) man-side (skriv man grep), vil du se “grep [opsjoner] MØNSTER [FIL …]”. Det faktum at “FILE” etterfølges av “…” betyr at det kan være flere filargumenter; det faktum at det er i parentes ([]) betyr at filargumentet er valgfritt (dvs. at det ikke har å være hvilken som helst). Fortsett å lese, og du vil se “ Grep søker i de navngitte inndatafilene (eller standardinndata hvis ingen filer er navngitt, eller filnavnet - er gitt)…. ” Så: hvis ingen filer er spesifisert, søker grep i standardinngangen.

Svar

De fleste kommandoer kan håndtere skriv inn enten «en fil som de trenger å åpne for inngang, eller som en datastrøm som sendes til kommandoen via STDIN.

Når innholdet i cat file.txt sendes til en annen kommando gjennom et rør (|) utgangen via STDOUT som sendes til røret på venstre side, settes opp og mates til kommandoen som «s på høyre side av røret» s STDIN.

Hvis innholdet ikke sendes via STDOUT -> STDIN via et rør, kan kommandoer motta data ved å åpne filer som sendes med navn via kommandolinjeargumenter.

Eksempler

Sender utdata til STDOUT.

$ cat file 1 2 3 4 5 

Utgang fra cat file sendes via STDOUT til grep» s STDIN via røret.

$ cat file | grep 5 5 

Behandler filen som et kommandolinjeargument.

$ grep 5 file 5 

Behandler innholdet av filen via STDIN direkte.

$ grep 5 < <(cat file) 5 

Her jeg «m demonstrerer at innholdet i file kan rettes til grep via STDIN ovenfor.

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *