kucing * | grep sesuatu ... file apa hasilnya?

8

Jika ada yang menjalankan perintah berikut

cat * | grep DATABASE

shell akan memuntahkan semua baris dalam file * yang berisi kata DATABASEdi dalamnya. Apakah ada cara untuk juga memuntahkan file apa setiap baris terpisah?

Saya mencoba menggunakan -Hopsi untuk grep yang menurut manmengatakan print the filename for each matchtetapi di shell saya hanya mengatakan

(standard input):$DATABASE_FUNCTION = dothis();
Jake Wilson
sumber
Pertanyaan bagus. Saya masih berusaha untuk mematahkan kucing -> kebiasaan grep sendiri. :)
Sirex

Jawaban:

22

Jangan gunakan kucing untuk itu. Alih-alih menggunakan grep DATABASE *atau grep -n DATABASE *(jika Anda ingin mengetahui nomor baris serta nama file) secara langsung.

Lihat penggunaan kucing yang tidak berguna .

Untuk lebih memperjelas: cat *sebenarnya menyatukan semua file ketika memberi mereka untuk menerobos melalui pipa, jadi grep tidak memiliki cara untuk mengetahui konten mana yang termasuk file yang mana, dan memang tidak bisa benar-benar tahu apakah itu memindai file atau Anda hanya mengetik dengan cepat. Itu semua satu aliran input standar besar setelah Anda menggunakan pipa.

Terakhir, -Hredundan hampir pasti karena grep mencetak nama file secara default ketika punya lebih dari satu file untuk dicari. Ini bisa berguna jika Anda ingin mem-parsing output, meskipun, karena ada beberapa kemungkinan *glob akan meluas ke satu file dan grep akan dalam hal itu menghilangkan nama file.

Eduardo Ivanec
sumber
6

Gunakan grep -H DATABASE *(catatan: jika ada lebih dari satu file di direktori, -Hini opsional).

Masalah yang Anda alami adalah bahwa dengan perintah Anda, cat *menggabungkan semua file bersama menjadi satu kekacauan besar, dan kemudian |mengirimkannya ke input standar grep DATABASE. Pada saat grep melihat data, info tentang dari mana asalnya telah hilang. Solusinya adalah membuat grep melakukan pekerjaan mencari melalui file individual, jadi ketika menemukan kecocokan ia tahu dari mana file itu berasal.

Gordon Davisson
sumber