Grep adalah alat yang sangat baik ketika Anda harus mencari konten file.
Biasanya, Anda menjalankan grep pada satu file seperti ini:
grep search_term filename
Grep cukup serbaguna. Jika Anda ingin mencari semua file dalam direktori dengan grep , gunakan seperti ini:
grep search_term *
Ada masalah dengan itu. Itu hanya mencari di semua file di direktori saat ini. Itu tidak akan mencari di subdirektori.
Anda dapat melakukan pencarian grep di semua file dan semua subdirektori dari direktori saat ini menggunakan -r
opsi pencarian rekursif:
grep -r search_term .
Anda juga dapat menentukan jalur direktori jika Anda tidak berada di direktori tempat Anda ingin melakukan pencarian:
grep -r search_term directory_path
Itu adalah rekap cepat. Mari saya tunjukkan semua ini secara rinci dengan contoh yang tepat sehingga lebih mudah untuk Anda pahami.
Grep mencari di semua file direktori
Inilah struktur direktori yang akan saya gunakan dalam contoh ini. Kecuali empty.txt, semua file mengandung istilah 'sederhana' yang akan saya lakukan pencarian grep.
example@unixlinux.online:~/scripts$ tree
.
├── dir1
│ └── new_script.sh
├── dir2
│ └── your_script.sh
├── dir3
│ ├── empty.txt
│ └── linked.txt -> ../../sample.txt
├── my_script.sh
└── your_script.sh
3 directories, 6 files
Untuk mencari kata 'sederhana' di semua file direktori saat ini, cukup gunakan wild card (*). Kartu liar sebenarnya menggantikan nama semua file dan direktori di direktori saat ini.
grep simple *
Ini akan mencari di semua file di direktori saat ini, tetapi tidak akan masuk ke subdirektori. Karena Anda tidak dapat langsung mengambil pencarian di direktori, itu akan menampilkan kesalahan "XYZ adalah direktori" bersama dengan hasil pencarian.
Jika Anda tidak berada di direktori yang sama tempat Anda ingin melakukan, Anda dapat menentukan jalur direktori dan mengakhirinya dengan /*
grep search_term directory_path/*
Pada dasarnya, Anda menggunakan wild card untuk memperluas semua elemen (file dan direktori) dari direktori yang diberikan.
Sekarang setelah Anda mengetahuinya, mari kita lihat bagaimana Anda dapat melakukan pencarian rekursif dengan grep sehingga grep juga melihat ke dalam file di subdirektori.
Grep pencarian rekursif di semua subdirektori direktori
Grep menyediakan -r
pilihan untuk pencarian rekursif. Dengan opsi ini, grep akan melihat ke semua file di direktori saat ini (atau yang ditentukan) dan juga akan melihat semua file dari semua subdirektori.
Berikut pencarian rekursif yang saya lakukan pada contoh sebelumnya untuk melakukan pencarian grep di folder saat ini:
grep -r simple .
Ini hasilnya:
Ada juga -R
opsi untuk pencarian rekursif dan bekerja hampir sama dengan -r
pilihan.
grep -R simple .
Jadi, apa bedanya grep -r
dan grep -R
? Hanya satu, sebenarnya. -R
adalah pencarian dereferensi yang berarti akan mengikuti tautan simbolik untuk menuju ke file asli (yang mungkin terletak di beberapa bagian lain dari sistem).
Lihatlah output dari -R
cari dalam contoh yang sama:
Apakah Anda memperhatikan bahwa itu memberikan hasil pencarian tambahan dengan linked.txt
yang pada dasarnya adalah tautan simbolik dan dihilangkan dari pencarian grep dengan -r
pilihan?
Jika Anda tidak berada di direktori tempat Anda ingin melakukan pencarian rekursif, cukup berikan jalur absolut atau relatif direktori tersebut ke perintah grep:
grep -r search_term path_to_directory
Kiat bonus:Kecualikan direktori tertentu dari pencarian grep rekursif
Semuanya tampak bagus tetapi bagaimana jika Anda ingin mengecualikan direktori tertentu dari pencarian rekursif? Ada ketentuannya juga. Sudah kubilang, grep adalah perintah yang sangat serbaguna.
grep -r --exclude-dir=dir_name serach_term directory_path
Bukan itu. Anda dapat mengecualikan lebih dari satu subdirektori dari pencarian rekursif dengan cara berikut:
grep -r --exclude-dir={dir1,dir2} serach_term directory_path
Berikut adalah tampilan mengecualikan direktori dalam contoh kami di sini:
Dan ya, seperti yang ditunjukkan oleh contoh di atas, pengecualian berfungsi dengan -r
dan -R
opsi rekursif.
Untuk meringkas
Berikut ringkasan singkat penggunaan grep search untuk banyak file dan direktori:
Perintah Grep | Deskripsi |
---|---|
string grep * | Mencari di semua file di direktori saat ini |
grep string dir | Mencari di semua file di direktori dir |
grep -r string . | Pencarian rekursif di semua file di semua subdirektori |
grep -r string dir | Pencarian rekursif di semua file di semua subdirektori dir |
grep -R string . | Sama seperti r tetapi mengikuti tautan simbolik |
Saya harap Anda menyukai tip grep cepat ini. Jika Anda menginginkan lebih, Anda dapat membaca tutorial terperinci ini tentang menggunakan perintah grep:
Beri tahu saya jika Anda memiliki pertanyaan atau saran tentang topik ini.