2016-09-17 1 views
2

Ich versuche, diese Linie zu verstehen:Verstehen der {}/dev/null ; wenn FIND mit -exec

find $HOME -name "*.c" -exec grep "find this string" {} /dev/null \; 

verstehe ich die meisten, aber ich bin nicht sicher über die /dev/null, die nach dem {} und vor dem ; erscheint.

find lokalisiert jede C-Programmdatei, und dann sucht grep für jede Datei nach der Zeile, die die Zeichenfolge enthält ... und sendet es dann alle Fehler an /dev/null?

+0

Es scheint nichts zu '/ dev/null' zu senden, es gibt es als zweites Argument zu grep, und grep wird dort nie etwas finden. So wie es ist, hat es meiner Meinung nach keine Wirkung. –

+0

das ist seltsam, weil es im Unix-Lehrbuch ist, das ich für die Schule bekommen habe – Brow

Antwort

5

Es wird verwendet, um Grep zu zwingen, den passenden Dateinamen zu drucken, nur nützlich in Greps, die keine spezielle Option dafür haben. Schauen Sie:

$ cat file 
1 
2 
3 

$ grep 2 file 
2 

$ grep 2 file /dev/null 
file:2 

Es wird verwendet, erforderlich werden, dass die Ausgabe zu erhalten, aber mit GNU grep (und andere?) In diesen Tagen Sie können dies tun, statt:

$ grep -H 2 file 
file:2 

Sie können das verkaufen- überprüfen bis zum Datum auf deinem Lehrbuch ;-).

+2

Sehr nette Antwort mit der Erklärung. Ich dachte POSIX 'grep' hätte dafür eine Option, aber' -l' ist der Dateiname * nur *, nicht das Gleiche. Das Lehrbuch sollte unbedingt erklären, warum '/ dev/null' als Argument übergeben wird, da es im Grunde nur dazu verwendet wird, einen Nebeneffekt auszulösen. – chepner

Verwandte Themen