Unterschied zwischen grep Vs cat und grep

8

Ich würde gerne den Unterschied zwischen den unten 2 Befehlen wissen, ich verstehe, dass 2) sollte verwendet werden, aber ich möchte die genaue Reihenfolge kennen, die passiert in 1) und 2) Angenommen, der Dateiname enthält 200 Zeichen

1) Dateiname der Katze | grep regex

2) grep regex dateiname

    
unixadmin007 22.11.2012, 07:40
quelle

5 Antworten

14

Funktional (in Bezug auf die Ausgabe) sind diese beiden gleich. Die erste erstellt tatsächlich einen separaten Prozess cat , der einfach den Inhalt der Datei an die Standardausgabe sendet, die auf der Standardeingabe von grep angezeigt wird, weil die Shell die beiden mit einer Pipe verbunden hat.

>

In diesem Sinne ist grep regex <filename auch äquivalent, aber mit einem Prozess weniger.

Wo Sie feststellen werden, dass der Unterschied in Varianten liegt, wenn die zusätzlichen Informationen (die Dateinamen) verwendet werden von grep , wie mit:

%Vor%

Der Unterschied zwischen diesen und:

%Vor%

ist, dass der ehemalige weiß über die einzelnen Dateien, während der letztere sieht es als eine Datei (ohne Namen).

Während der erstere Ihnen vielleicht Folgendes sagt:

%Vor%

Letzteres wird eher wie folgt aussehen:

%Vor%

Eine andere ausführbare Datei, die sich anders verhält, wenn sie die Dateinamen kennt, ist wc , das Wort counter programs:

%Vor%     
paxdiablo 22.11.2012 07:53
quelle
4

Erster:

%Vor%

Normalerweise öffnet cat die Datei und gibt den Inhalt zeilenweise an stdout aus. Aber hier gibt es seinen Inhalt an die Pipe '|' aus. Danach liest grep aus der Pipe (es nimmt die Pipe als stdin) und wenn die regex übereinstimmt, druckt die Zeile auf stdout. Aber hier ist ein Detail, das grep im neuen Shell-Prozess geöffnet wird, so dass die Pipeline ihre Eingabe als Ausgabe an den neuen Shell-Prozess weiterleitet.

Zweiter:

%Vor%

Hier liest grep direkt aus der Datei (darüber wurde von der Pipe gelesen) und stimmt mit regex überein, wenn die übereinstimmende Zeile auf stdout gedruckt wird.

    
denizeren 22.11.2012 07:45
quelle
1

Wenn Sie den tatsächlichen Ausführungszeitunterschied überprüfen möchten, erstellen Sie zuerst eine Datei mit 100000 Zeilen:

%Vor%

Jetzt messen:

%Vor%

Wie wir sehen können, ist der Unterschied nicht zu groß ...

    
dstronczak 22.11.2012 07:57
quelle
0

Funktional sind sie gleichwertig, allerdings teilt die Shell zwei Prozesse für cat filename | grep regex und verbindet sie mit einer Pipe.

    
iabdalkader 22.11.2012 07:45
quelle
0

Eigentlich, obwohl die Ausgänge gleich sind;

%Vor%

Dieser Befehl sucht nach dem Inhalt der Datei "Dateiname" und holt dann Regex darin; während

%Vor%

Dieser Befehl sucht direkt nach dem Inhalt namens regex in der Datei "Dateiname"

    
Nji 13.10.2017 01:27
quelle

Tags und Links