Ich bin auf in diesem Beitrag gestoßen, der mein Problem erklärt. Angenommen, es gibt eine Datei mit dem Namen file.txt
, die „foo World“ enthält.
Die Antwort von Tyler erklärt viel, aber ich bin verwirrt darüber, wie
cat file.txt | grep "foo"
ähnelt
grep "foo" file.txt
Ich dachte, grep
erfordert das folgende
grep input argument // input is the string to search for (i.e) foo and // argument is the file path (./file.txt)
Jetzt ist die Ausgabe von cat file.txt
Inhalt der Datei, die Dies wird die Eingabe von grep
? Hab ich recht? Wenn ja, dachte ich, grep
benötigt einen Dateipfad als Zeichenfolge?
Kommentare
- In der
grep(1)
Manpage (Typman grep
), Sie sehen „grep [options] PATTERN [FILE …]“. Die Tatsache, dass auf „FILE“ „…“ folgt, bedeutet, dass es mehrere Dateiargumente geben kann. Die Tatsache, dass es in eckigen Klammern steht ([
…]
), bedeutet, dass das Dateiargument optional ist (dh nicht vorhanden ist) beliebig sein). Lesen Sie weiter und Sie werden sehen, dass „ Grep die benannten Eingabedateien durchsucht (oder die Standardeingabe, wenn keine Dateien benannt sind, oder den Dateinamen-
ist gegeben)…. ” Also: Wenn keine Dateien angegeben sind, durchsucht grep die Standardeingabe.
Antwort
Die meisten Befehle können damit umgehen Eingabe, die entweder eine Datei ist, die zur Eingabe geöffnet werden muss, oder als Datenstrom, der über STDIN an den Befehl übergeben wird.
Wenn der Inhalt von cat file.txt
wird über eine Pipe an einen anderen Befehl gesendet (|
). Die Ausgabe über STDOUT, die an die Pipe auf der linken Seite übergeben wird, wird eingerichtet und dem Befehl zugeführt, der „s auf der rechten Seite der Pipe“ s STDIN.
Wenn der Inhalt nicht über STDOUT -> STDIN über eine Pipe übergeben wird, können Befehle Daten empfangen, indem sie Dateien öffnen, die namentlich über übergeben werden Befehlszeilenargumente.
Beispiele
Sendet die Ausgabe an STDOUT.
$ cat file 1 2 3 4 5
Ausgabe von cat file
wird über STDOUT über die Pipe an grep
“ s STDIN gesendet.
$ cat file | grep 5 5
Verarbeiten der Datei als Befehlszeilenargument.
$ grep 5 file 5
Verarbeitet den Inhalt der Datei direkt über STDIN.
$ grep 5 < <(cat file) 5
Hier I. Ich zeige, dass der Inhalt von file
über STDIN oben an grep
gerichtet werden kann.