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
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.
grep(1)
man-side (skrivman 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.