Di Windows, saya akan melakukan pencarian untuk menemukan kata di dalam folder. Demikian pula, saya ingin tahu apakah ada kata tertentu di dalam direktori yang berisi banyak sub-direktori dan file. Pencarian saya untuk sintaks grep menunjukkan saya harus menentukan nama file, yaitu grep string filename
.
Sekarang, saya tidak tahu nama file, jadi apa yang harus saya lakukan? Seorang teman menyarankan untuk melakukannya grep -nr string
, tetapi saya tidak tahu apa artinya ini dan saya tidak mendapatkan hasil dengan itu (tidak ada jawaban sampai saya mengeluarkan a ctrl + c).
*
? Entah akan menghasilkan ekspansi wildcard shell (jika ada nama file yang cocok dengan pola wildcard), atau grep akan menganggapnya sebagai 0 atau atau lebih operator pengulangan untuk karakter sebelumnya*
.grep -nr MobileAppSer* .
1. Anggaplah kita memiliki 3 file dalam direktori yang cocok saat iniMobileAppSer*
pola wildcard: bernamaMobileAppServlet.java
,MobileAppServlet.class
,MobileAppServlet.txt
. Kemudiangrep
akan dipanggil seperti ini:grep -nr MobileAppServlet.class MobileAppServlet.java MobileAppServlet.txt .
. Itu berarti mencari teks "MobileAppServlet.class" di file MobileAppServlet.java, MobileAppServlet.txt, dan di tempat lain di direktori saat ini - yang tentunya bukan yang diinginkan pengguna di sini.MobileAppSer*
pola wildcard,grep
akan menerima argumenMobileAppSer*
apa adanya dan dengan demikian akan menganggapnya sebagai pencarian untuk teks "MobileAppSe" diikuti oleh 0 atau lebih kemunculan "r", sehingga akan berusaha menemukan teks "MobileAppSe", "MobileAppSer", "MobileAppSerr", "MobileAppSerrr", dll. dalam isi file direktori saat ini - bukan apa yang diinginkan pengguna juga.Catatan tambahan: ini memenuhi sintaks
grep [options] string filename
karena dalam sistem mirip Unix, direktori adalah sejenis file (ada istilah "file biasa" yang secara khusus merujuk pada entitas yang disebut hanya "file" di Windows).grep -nr string
membaca konten untuk mencari dari input standar, itu sebabnya ia hanya menunggu input dari Anda, dan berhenti melakukannya ketika Anda menekan ^ C (itu akan berhenti pada ^ D juga, yang merupakan kombinasi tombol untuk akhir-dari -mengajukan).sumber
grep -inr "my word" .
-r
untuk grep berarti pencarian dalam subdirektori secara rekursif dan-n
berarti awalan setiap baris output dengan nomor baris yang sesuai dari file yang berisi baris itu.man grep
menjelaskan semua ini, dan banyak lagi.GREP : Cetak Ekspresi Reguler Global / Parser / Prosesor / Program.
Anda dapat menggunakan ini untuk mencari direktori saat ini.
Anda dapat menentukan -R untuk "rekursif", yang berarti program mencari di semua subfolder, dan subfoldernya, dan subfoldernya, dll.
-n
akan mencetak nomor baris, yang cocok dengan file.-i
akan mencari case-insensitive (huruf kapital / non-kapital).sumber
akan melakukan pencarian RECURSIVE (artinya direktori dan semua subdirektori) untuk search_string. (seperti yang dijawab dengan benar oleh usta).
Alasan Anda tidak mendapatkan jawaban dengan saran teman Anda tentang:
karena tidak ada direktori yang ditentukan. Jika Anda berada di direktori tempat Anda ingin melakukan pencarian, Anda harus melakukan hal berikut:
Penting untuk memasukkan '.' karakter, karena ini memberitahu grep untuk mencari direktori INI.
sumber
Ada juga:
tapi itu mungkin agak banyak untuk pemula.
find
adalah walker / lister tujuan umum, yang-type f
berarti "mencari file biasa daripada direktori dan pipa bernama dan apa pun yang Anda",-print0
berarti "mencetaknya pada output standar menggunakan karakter null sebagai pembatas". Output darifind
dikirim kexargs -0
dan yang mengambil input standar dalam potongan (untuk menghindari batasan panjang baris perintah) menggunakan karakter nol sebagai pemisah rekaman (daripada baris baru standar) dan berlakugrep -li word
untuk setiap set file. Padagrep
,-l
berarti "daftar file yang cocok" dan-i
berarti "tidak sensitif huruf besar"; Anda biasanya dapat menggabungkan opsi karakter tunggal sehingga Anda akan melihat-li
lebih sering daripada-l -i
.Jika Anda tidak menggunakan
-print0
dan-0
kemudian Anda akan mengalami masalah dengan nama file yang mengandung spasi sehingga menggunakannya adalah kebiasaan yang baik.sumber
man find
dari baris perintah untuk melihat opsi apa yang Andafind
dukung.Mengapa tidak melakukan pencarian rekursif untuk menemukan semua instance di sub direktori:
Ini bekerja seperti pesona.
sumber
grep -r "yourstring" *
Akan menemukan "yourstring" di semua file dan folderSekarang jika Anda ingin mencari dua string yang berbeda secara bersamaan, Anda selalu dapat menggunakan opsi E dan menambahkan kata-kata untuk pencarian. contoh setelah istirahat
grep -rE "yourstring|yourotherstring|$" *
akan mencari lokasi daftar tempatyourstring
atauyourotherstring
cocoksumber
Opsi lain yang saya suka gunakan:
-type f mengembalikan Anda hanya file dan bukan folder
-exec dan {} menjalankan grep pada file yang ditemukan dalam pencarian (sintaks yang tepat adalah "-exec command {}").
sumber
-R mengikuti juga symlink ketika -r tidak.
sumber
Jawaban yang Anda pilih baik-baik saja, dan itu berfungsi, tetapi itu bukan cara yang tepat untuk melakukannya, karena:
Ini sebenarnya mencari string
"yourStrin"
dan"g"
0 atau berkali-kali.Jadi cara yang tepat untuk melakukannya adalah:
Perintah ini mencari string dengan karakter apa pun sebelum dan sesudah di folder saat ini.
sumber
grep -nr yourString
bekerja juga, karena terlihat telanjangyourString
di mana saja di baris (atau setidaknya itu pada sistem saya, OSX Lion)Mirip dengan jawaban yang diposting oleh @eLRuLL, cara yang lebih mudah untuk menentukan pencarian yang menghormati batasan kata adalah dengan menggunakan
-w
opsi:sumber
Jalankan (terminal) perintah berikut di dalam direktori. Itu akan secara rekursif memeriksa di dalam subdirektori juga.
sumber
Contoh berikut terlihat secara rekursif
your search string
di*.xml
dan*.js
file yang terletak di suatu tempat di dalam folderpath1
,path2
danpath3
.Jadi, Anda dapat mencari di subset file untuk banyak direktori, cukup memberikan path di akhir.
sumber
Jangan gunakan grep. Unduh Silver Searcher atau ripgrep . Keduanya luar biasa, dan jauh lebih cepat daripada grep atau ack dengan banyak pilihan.
sumber