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 (Typ man 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.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.