*なぜ* find / grepで/ dev / nullを使用するとファイル名が表示されるのですか?


2
find . -name "*.java" -exec grep "foo" {} \;

これは、ファイル名ではなく、一致するものだけを出力します。

find . -name "*.java" -exec grep "foo" /dev/null {} \;

しかし、これはファイル名も出力します。

どうして?/ dev / nullがミックスに挿入されたときにファイル名が印刷されるfind / grepの仕組みは何ですか?

PS-はい、「grep -H」を実行できることを知っています

回答:


6

-hオプションも-Hオプションも使用しない場合、複数のファイルが引数として指定されると、grepはファイル名を書き出します。したがって、grepの引数として/ dev / nullを追加すると、常に複数のファイルが作成されるため、ファイル名が常に書き込まれます。しかし、ええ、˛を使用することgrep -Hは、常にファイル名を書き込む最も安全な方法です。


1

grep複数のファイルを検索する場合、一致した行の前にファイル名を出力して、行が見つかった場所を区別すると推測します。それ以外の場合、ファイルが1つだけ指定されていれば、ユーザーは行がどのファイルにあるかをすでに知っています。

使用するgrep -h出力にファイル名をオフにし、grep -Hそれらを強制します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.