Bagaimana Anda mencari teks tertentu dalam tipe file tertentu? [duplikat]

13

Kemungkinan Duplikat:
Bagaimana saya bisa membaca file sumber untuk beberapa teks?

Apa perintah untuk mencari teks tertentu dalam tipe file tertentu, secara rekursif, di bawah direktori saat ini?

Phillip
sumber
Apa yang ingin kamu kembalikan? baris teks aktif? nama file teks itu?
MaQleod
@MaQleod: Itu bagus (nama file + linenumber + cuplikan), jika memungkinkan.
Phillip
@ slhck: ack-grep tidak diinstal; Saya tidak memiliki izin untuk menginstalnya.
Phillip
1
Anda tidak perlu ack-grep, Anda dapat menggunakan contoh dalam pertanyaan sebagai awal (seperti yang saya katakan), yaitu find | xargs | grepbaris. Untuk keluaran spesifik, man grepselalu berguna untuk dibaca.
slhck
@ Slhck: Terima kasih, jadi saya lakukan grep -r --include=*.<type> "<string>" ., yang berhasil. Sayangnya, halaman manual tidak terlalu mudah menyebutkan titik yang tertinggal.
Phillip

Jawaban:

11
find . -type f -name '*.extension' | xargs grep "string"

Perintah ini menjalankan find di direktori lokal (.) Untuk setiap file dengan nama yang cocok dengan pola * .extension, kemudian jalankan grep untuk "string" pada hasil find . Perhatikan bahwa find secara inheren bersifat rekursif. Selama Anda dapat membedakan file yang Anda inginkan dari file yang Anda tidak berdasarkan nama, ini akan bekerja untuk Anda.

Fopedush
sumber
2
Ini rusak dengan nama file yang mengandung spasi, Anda harus menggunakan print0opsi untuk lebih aman.
slhck
Hanya find -print0tidak akan membantu, juga gunakan xargs -0:find . -type f -name "*.ext" -print0 | xargs -0 grep "string"
BurninLeo
0

Untuk daftar nama file, nomor baris dalam file yang ditentukan dan baris teks muncul:

for x in *.xxx; do [ -r $x ] | cat $x | grep -n TEXT | xargs printf "$x:%s\n";done

Ini hanya akan berjalan di direktori saat ini, tetapi akan memformatnya dengan baik untuk Anda.

MaQleod
sumber