Grep und Pipes in Linux verstehen

Grep und Pipes in Linux verstehen

Ich bin aufDasBeitrag, der mein Problem erklärt. Angenommen, es gibt eine Datei namens file.txt, die "foo World" enthält.
Die von Tyler gepostete Antwort erklärt viel, aber ich bin verwirrt, wie

cat file.txt | grep "foo"

ist ähnlich wie

grep "foo" file.txt

Ich dachte, grepes wäre folgendes erforderlich

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

Nun ist die Ausgabe der cat file.txtInhalt der Datei, die foo Worlddie Eingabe von wird grep? Habe ich Recht? Wenn ja, dachte ich, es wird grepein Dateipfad als Zeichenfolge benötigt?

Antwort1

Die meisten Befehle können mit Eingaben umgehen, die entweder aus einer Datei bestehen, die sie zur Eingabe öffnen müssen, oder aus einem Datenstrom, der über STDIN an den Befehl übergeben wird.

Wenn der Inhalt cat file.txtüber eine Pipe () an einen anderen Befehl gesendet wird, |wird die Ausgabe über STDOUT, die an die Pipe auf der linken Seite übergeben wird, eingerichtet und an den Befehl weitergeleitet, der sich auf der rechten Seite von STDIN der Pipe befindet.

Wenn der Inhalt nicht über eine Pipe über STDOUT -> STDIN übergeben wird, können Befehle Daten empfangen, indem sie Dateien öffnen, die namentlich über Befehlszeilenargumente übergeben werden.

Beispiele

Sendet die Ausgabe an STDOUT.

$ cat file 
1
2
3
4
5

Die Ausgabe von cat filewird über STDOUT grepüber die Pipe an STDIN gesendet.

$ cat file | grep 5
5

Verarbeiten der Datei als Befehlszeilenargument.

$ grep 5 file 
5

Verarbeiten des Dateiinhalts direkt über STDIN.

$ grep 5 < <(cat file)
5

Hier zeige ich, dass der Inhalt von über STDIN oben fileumgeleitet werden kann .grep

verwandte Informationen