Vor kurzem habe ich diesen find
Einzeiler erhalten, aber ich kann nicht erklären, woher der Unterschied der beiden folgenden stammt:
Beispiel 1
[root@centos share]# find . -exec grep -i "madis" {} /dev/null \;
./names:Madison Randy:300:Product Development
Beispiel 2
[root@centos share]# find . -exec grep -i "madis" {} \;
Madison Randy:300:Product Development
Wie Sie sehen, gibt es in der ersten Datei die spezifische Datei, von der diese Zeichenfolge abgeleitet ist, und bis jetzt bin ich wirklich nicht in der Lage herauszufinden, warum dies geschieht.
/dev/null
, dass sichergestellt ist, dass alles, was grep-ed ist, nicht in der (leeren)/dev/null
Datei gefunden wird, sodass nur die richtigen Speicherorte ausgegeben werden."/dev/null
Sie suchen , verschwenden Sie keine Zeit damit, eine nicht leere Dummy-Datei zu durchsuchen. Und schließlich ist die Absicht der Suche/dev/null
für diejenigen offensichtlich, die mit dieser Redewendung vertraut sind.man grep
:Der Unterschied ergibt sich aus dem Aufruf von grep mit ein oder zwei Dateiargumenten in beiden Fällen. Anstatt hinzuzufügen
/dev/null
, könnten Siegrep
mit dem Argument aufrufen-H
. Vielleicht wird das/dev/null
Verhalten weiter unterstützt.quelle
grep -H
ist nicht portabel - der/dev/null
Trick funktioniert ohne GNU grep.Das erste Beispiel entspricht dem Ausführen von grep über zwei Dateien für jede Datei, die als Ergebnis des
find
Ausdrucks gefunden wurde. Zum Beispiel, wennfind
drei Dateien gefundena.txt
werdenb.txt
undc.txt
dann ausgeführtgrep
wird alsZu welcher
grep
wird der Dateiname angezeigt, für den die Ausgabe passt. Da nichts mit / dev / null übereinstimmt, wird garantiert, dass der Dateiname der ersten Datei gedruckt wird, wenn er übereinstimmt.Das zweite Beispiel ist äquivalent zu
In diesem Fall wird der Dateiname nicht für Übereinstimmungen gedruckt, da es nur ein Argument gibt.
quelle