Pertanyaan * Mengapa * tidak menggunakan / dev / null di find / grep menampilkan nama file?


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

Ini hanya mencetak kecocokan, tidak ada nama file.

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

Tapi ini juga mencetak nama file.

Mengapa? Apa mekanisme find / grep yang menyebabkan nama file untuk dicetak ketika / dev / null dimasukkan ke dalam campuran?

PS - ya, saya tahu saya bisa melakukan "grep -H"


2
2018-05-13 12:38


asal




Jawaban:


Jika Anda tidak menggunakan opsi -h atau opsi -H, maka grep akan menuliskan nama file jika lebih dari satu file diberikan sebagai argumen. Jadi jika Anda menambahkan / dev / null sebagai argumen ke grep, Anda akan selalu memiliki lebih dari satu, sehingga nama file akan selalu ditulis. Tapi ya, menggunakan ˛grep -H adalah cara paling aman untuk selalu memiliki nama file yang ditulis.


5
2018-05-13 12:47





Saya akan menebak itu grep, ketika mencari beberapa file, akan menampilkan nama file di depan garis yang cocok untuk membedakan di mana ia menemukan garis. Jika tidak, jika hanya satu file yang ditentukan, pengguna sudah tahu apa file baris yang akan ditemukan.

Menggunakan grep -h untuk mematikan nama file dalam output, dan grep -H untuk memaksa mereka.


1
2018-05-13 13:40