Buat daftar file yang mengandung kata tertentu dalam teks mereka

30

Saya ingin membuat daftar file secara rekursif dan unik yang berisi kata yang diberikan.

Contoh : Memeriksa kata 'cek', yang biasa saya lakukan adalah grep

$ grep check * -R

Tetapi karena ada banyak kemunculan kata ini, saya mendapatkan banyak hasil. Jadi saya hanya perlu daftar nama file yang berisi kata pencarian yang diberikan. Saya kira beberapa trik dengan finddan xargsakan cukup di sini, tetapi tidak yakin.

Ada ide?

mtk
sumber

Jawaban:

39

Gunakan opsi -latau --files-with-matchesyang didokumentasikan sebagai berikut:

Menekan output normal; alih-alih cetak nama setiap file input dari mana output biasanya akan dicetak. Pemindaian akan berhenti pada pertandingan pertama. ( -lditentukan oleh POSIX.)

Jadi, sebagai contoh, Anda dapat menggunakan yang berikut ini:

$ grep check * -lR
NN
sumber
Bekerja pada MSYS juga. Besar!
Kos
2
Saya menggunakan grep -rl "text to find" "/usr/share"dan itu bekerja dengan baik!
Shrout1
18
find . -type f -exec grep -l check {} +

Anda mungkin tidak ingin menggunakan -Ropsi yang dengan versi modern GNU grepmengikuti symlink ketika turun direktori. Gunakan -ropsi sebagai gantinya di sana yang sejak versi 2.12 (April 2012) tidak lagi mengikuti symlinks.

Jika grep Anda bukan GNU, atau lebih tua dari versi 2.12, atau jika Anda memerlukan kode Anda untuk dibawa-bawa ke sistem GNU yang tidak berdarah, gunakan findperintah di atas.

Jika tidak, Anda dapat melakukan:

grep -rl check .

Jangan gunakan *(karena itu akan menghilangkan file tersembunyi di direktori saat ini (dan hanya di direktori saat ini) dan akan menyebabkan masalah untuk file yang namanya dimulai dengan a -), hindari meneruskan opsi setelah argumen karena itu tidak dijamin untuk bekerja tergantung pada lingkungan dan tidak portabel.

Stéphane Chazelas
sumber
1

Coba ini:

find . -type f | xargs grep -c check $1 | grep -v ":0"

Adapun grepbendera ...

-c akan mengembalikan nama file diikuti oleh: dan nomor yang menunjukkan berapa kali string pencarian muncul dalam file yang diberikan.

-vakan mengambil output dari greppencarian pertama , memfilter file dengan hasil nol, dan hanya mencetak file dengan hasil tidak nol.

brightwellcd
sumber
Ini akan mendapatkan negatif palsu jika Anda memiliki file (atau sutradara) yang namanya berisi :0. Lebih baik dilakukan grep -v ':0$'. Bahkan itu akan tercekik pada nama path yang mengandung baris baru.
Scott
0

grep -rin "whatToFind" locationToFInd

misal $ grep -rin "vihaan".

akan secara rekursif mencari dan mendaftarkan nama file dan baris yang sesuai dengan "vihaan" di dalamnya, "." merujuk ke direktori saat ini.

Vihaan Verma
sumber
0
find . -type f | grep "keyword" *

cari di direktori saat ini. Untuk mencari dari root, tentukan /bukan.

Maniraja Jorige
sumber
0

grep -lR "text-to-find" <where-to-find> juga berfungsi dengan baik.

misalnya, di grep -lR "NAVIGATE" .mana kita menemukan kata NAVIGATEdi .dalam direktori saat ini.

imsrgadich
sumber
-2
 grep -rli trim \` find . -name *.q \` 

Memberi Anda daftar .qfile berisi kata kuncitrim

Mithun
sumber