Cari string secara rekursif saat berada di direktori saat ini

15

Saya ingin mencari semua file secara rekursif dari direktori saya untuk string tertentu.

Saya mencoba

grep -r -i my_string

dan saya mencobanya di folder uji dengan dua file kecil tetapi tidak akan menemukan string.

Juga, apakah ada cara khusus untuk mendefinisikan "mengandung" daripada mencocokkan seluruh kata?

David
sumber
3
Coba grep -r -o -i "your_string" *(dengan "tanda kutip).
pl1nk
saya mendapatkan beberapa izin ditolak pesan, apakah hanya mengabaikan file-file itu tetapi terus memeriksa sisanya?
David
Benar, file-file ini semakin diabaikan.
pl1nk

Jawaban:

27

Apakah Anda mencari nama file atau kata di dalam file? grep mencari di dalam file, yang tampaknya seperti yang Anda inginkan.

grep menggunakan ekspresi reguler - pada kenyataannya, itulah yang merupakan bagian dari "re". Jadi, itu tidak menggunakan wildcard bash normal; yaitu, abc*tidak akan menemukan kata-kata yang dimulai dengan abc, ia akan menemukan kata-kata yang dimulai dengan ab, kemudian nol atau lebih yang mengikuti c. Tapi ya, jika Anda hanya memberikan pola, itu akan menemukannya di mana saja, tanpa sepengetahuan seluruh kata. Jika Anda ingin menemukan seluruh kata, Anda perlu membuat ekspresi reguler untuk mengatakannya.

Tapi, seperti kebanyakan perintah, Anda harus meletakkan nama file di akhir perintah, jadi contoh Anda hanya akan duduk di sana dan menunggu nama file.

Seperti yang dikatakan @plink, gunakan

grep -r -o -i "your_string" *

(atau *.*, atau filespec lainnya). Kesalahan bisa diabaikan. Jika Anda mendapatkan banyak kesalahan, Anda dapat menambahkan 2>/dev/nullsampai akhir, yang akan mengarahkan stderr ke perangkat nol.

Marty Fried
sumber
6
Bagi mereka yang penasaran: -r berarti rekursif (yaitu terlihat di folder saat ini dan SEMUA folder di folder saat ini DAN semua folder di folder itu ..... hingga tak terbatas), -o berarti itu tidak menunjukkan seluruh baris, dan -i adalah mengabaikan case.
BKSpurgeon
@johnsnails Backtick tidak diperlukan. Ini lebih cenderung menjadi kesalahan pemformatan di Stack Exchange ketika memposting sebagai blok kode inline.
tom_mai78101
Ya itu masuk akal.
johnsnails