2016-09-17 11 views
2

を見つける使用している場合:{}/dev/null について理解しています。私はこの行を理解しようとしています-exec

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

私はそれの大部分を理解し、私は{}後と;の前に表示され/dev/nullわからないです。

findはすべてのCプログラムファイルを検索し、各ファイルに対してgrepは文字列...を含む行を探し、すべてのエラーを/dev/nullに送信していますか?

+0

'/ dev/null'に何も送信していないようですが、grepの2番目の引数として与えられ、grepはそこで何も見つけられません。そのままでは、私の意見では効果がありません。 –

+0

それはUnixの教科書にあるので奇妙です。私は学校のために持っています – Brow

答えて

5

これはgrepに一致するファイル名を強制的に印刷するために使用されます。特定のオプションを持たないgrepsでのみ有効です。見て:

$ cat file 
1 
2 
3 

$ grep 2 file 
2 

$ grep 2 file /dev/null 
file:2 

をそれは、その出力を得るために必要とされるように使用されるが、GNUのgrepをしてあなたの代わりにこれを行うことができ、これらの日(およびその他?):

$ grep -H 2 file 
file:2 

あなたはsell-をチェックすることもできますあなたのテキストブックの日付;-)。

+2

説明と非常に素敵な答え。私はPOSIXの 'grep'にはこのオプションがあると思いましたが、' -l'はファイル名* only *であり、マッチではありません。なぜなら、基本的に副作用を引き起こすためだけに使用されているからです。なぜなら、 '/ dev/null'が引数として渡される理由を教科書にはっきりと説明するべきです。 – chepner

関連する問題