GNU/Linux >> Belajar Linux >  >> Linux

Temukan Teks dalam File di Linux menggunakan grep

Tutorial ini berfokus pada pencarian teks dalam file menggunakan perintah grep dan ekspresi reguler.

Saat bekerja pada sistem Linux, menemukan teks dalam file adalah tugas yang sangat umum dilakukan oleh administrator sistem setiap hari.

Anda mungkin ingin menelusuri baris tertentu dalam file log untuk memecahkan masalah server.

Dalam beberapa kasus, Anda tertarik untuk menemukan tindakan yang dilakukan oleh pengguna tertentu atau Anda ingin membatasi baris file besar menjadi beberapa baris.

Beruntung bagi Anda, ada beberapa cara menemukan teks ke dalam file di Linux tetapi perintah yang paling populer adalah perintah grep.

Dikembangkan oleh Ken Thompson pada masa-masa awal Unix, grep (g telusuri r . secara lokal e biasa ekspresi dan p cetak ) telah digunakan selama lebih dari 45 tahun oleh administrator sistem di seluruh dunia.

Dalam tutorial ini, kita akan fokus pada perintah grep dan bagaimana ini dapat membantu kami menemukan teks dalam file secara efektif di seluruh sistem kami.

Siap?

Sintaks Grep di Linux

Seperti yang ditentukan di atas, untuk menemukan teks dalam file di Linux , Anda harus menggunakan perintah grep dengan sintaks berikut

$ grep <option> <expression> <path>

Perhatikan bahwa opsi dan jalur bersifat opsional.

Sebelum mendaftar dan merinci semua opsi yang disediakan oleh grep, mari kita lihat cara cepat untuk menghafal sintaks perintah grep.

Untuk mengingat sintaks perintah grep, ingatlah bahwa grep dapat ditulis sebagai grEP yang berarti ekspresi muncul sebelum path.

Ini adalah cara yang bagus untuk mengingat sintaks grep dan sintaks find secara bersamaan tetapi sintaks find adalah kebalikannya :path first dan expression after.

Contoh grep cepat

Ada opsi kompleks yang dapat digunakan dengan grep, tetapi mari kita mulai dengan serangkaian contoh yang sangat cepat.

Mencantumkan pengguna menggunakan grep

Di Linux, seperti yang mungkin sudah Anda ketahui, akun pengguna terdaftar dalam file tertentu yang disebut file passwd.

Untuk menemukan akun root dalam file tertentu, cukup masukkan teks dan file yang ingin Anda cari.

$ grep root /etc/passwd
root:x:0:0:root:/root:/bin/bash

Cara lain yang sangat populer dalam menggunakan perintah grep adalah dengan mencari proses tertentu di sistem Linux Anda.

Proses Pemfilteran menggunakan grep

Seperti yang dijelaskan di salah satu tutorial kami sebelumnya, Anda harus menggunakan "ps ” untuk membuat daftar semua proses yang sedang berjalan di sistem Anda.

Anda dapat menyalurkan “ps ” perintah dengan “grep ” untuk memfilter proses yang Anda minati.

$ ps aux | grep <process>

Jika Anda tertarik dengan proses bash misalnya, Anda dapat mengetikkan perintah berikut

$ ps aux | grep bash

root      1230  0.0  0.0  23068  1640 tty1     S+   Jan11   0:00 -bash
user      2353  0.0  0.1  23340  5156 pts/0    Ss   03:32   0:00 -bash
user      2473  0.0  0.0  14856  1056 pts/0    S+   03:45   0:00 grep --color=auto bash
user      6685  0.0  0.0  23140  1688 pts/2    Ss+  Nov09   0:00 bash

Catatan :jika Anda tidak yakin tentang cara menggunakan pipa di Linux, berikut panduan lengkap tentang pengalihan input dan output.

Memeriksa log Kernel Linux dengan grep

Penggunaan hebat lainnya dari perintah grep adalah untuk memeriksa Linux Kernel buffer ring .

Ini banyak digunakan saat melakukan operasi pemecahan masalah pada sistem Linux karena kernel akan menulis ke cincin penyangganya saat memulai atau melakukan booting.

Katakanlah misalnya Anda memasukkan disk baru ke dalam sistem Anda dan Anda tidak yakin tentang nama yang diberikan ke disk baru ini.

Untuk mengetahui informasi ini, Anda dapat menggunakan “dmesg perintah ” dan menyalurkannya ke perintah grep.

$ dmesg | grep -E sd.{1}

Opsi Perintah Grep

Perintah grep sangat berguna dengan sendirinya tetapi bahkan lebih berguna bila digunakan dengan opsi.

Perintah grep secara harfiah memiliki banyak opsi berbeda.

Bagian berikut akan berfungsi sebagai panduan untuk menggunakan opsi tersebut dengan benar dan contoh akan diberikan di sepanjang jalan.

Telusuri string tertentu menggunakan grep

Dalam beberapa kasus, Anda mungkin tertarik menemukan string atau teks yang sangat spesifik ke dalam file.

Untuk membatasi pencarian teks ke string tertentu, Anda harus menggunakan kutipan sebelum dan sesudah istilah penelusuran Anda.

$ grep "This is a specific text" .

Untuk mengilustrasikan opsi ini, anggap saja Anda sedang mencari untuk nama pengguna tertentu di sistem Anda.

Karena banyak nama pengguna dapat dimulai dengan awalan yang sama, Anda harus mencari pengguna menggunakan tanda kutip.

$ grep "devconnected" /etc/passwd

Telusuri teks menggunakan ekspresi reguler

Salah satu fitur terbesar dari perintah grep adalah kemampuan untuk mencari teks menggunakan ekspresi reguler.

Ekspresi reguler jelas merupakan alat yang hebat untuk dikuasai :memungkinkan pengguna untuk mencari teks berdasarkan pola seperti teks yang dimulai dengan huruf atau teks tertentu yang dapat didefinisikan sebagai alamat email.

Grep mendukung dua jenis ekspresi reguler :basic dan diperpanjang ekspresi reguler.

Ekspresi Reguler Dasar (BRE)

Perbedaan utama antara ekspresi reguler dasar dan diperpanjang adalah fakta bahwa Anda dapat menggunakan simbol ekspresi reguler dengan BRE (ekspresi reguler dasar) tetapi mereka harus didahului dengan garis miring terbalik.

Pola ekspresi reguler yang paling umum dirinci di bawah ini dengan contoh:

  • ^ simbol :juga disebut simbol tanda sisipan, simbol topi kecil ini digunakan untuk menentukan awal garis. Akibatnya, teks apa pun setelah simbol tanda sisipan akan dicocokkan dengan baris yang dimulai dengan teks ini.

Misalnya, untuk menemukan semua drive yang dimulai dengan “sd” (juga disebut disk SCSI), Anda dapat menggunakan simbol tanda sisipan dengan grep.

$ lsblk | grep "^sb"
  • $ simbol :tanda dolar adalah kebalikan dari simbol caret, digunakan untuk menentukan akhir baris. Akibatnya, pencocokan pola akan berhenti tepat sebelum tanda dolar. Ini sangat berguna saat Anda ingin menargetkan istilah tertentu.

Untuk melihat semua pengguna memiliki bash shell di sistem Anda, Anda dapat mengetikkan perintah berikut

$ cat /etc/passwd | grep "bash$"
  • . (simbol titik):simbol titik digunakan untuk mencocokkan satu karakter tunggal dalam ekspresi reguler. Ini bisa sangat berguna jika istilah penelusuran berisi huruf yang sama di awal dan di akhir, tetapi tidak di tengah.

Jika misalnya, Anda memiliki dua pengguna di sistem Anda, satu bernama “bob” dan satu lagi bernama “bab”, Anda dapat menemukan kedua pengguna dengan menggunakan simbol titik.

$ cat /etc/passwd | grep "b.b"
  • [ ] (simbol kurung) :simbol ini digunakan untuk mencocokkan hanya sebagian karakter. Jika Anda hanya ingin mencocokkan karakter "a", atau "o", atau "e", Anda harus menyertakannya dalam tanda kurung.

Kembali ke contoh “bob”, jika Anda ingin membatasi pencarian Anda pada “bob” dan “bab”, Anda bisa mengetikkan perintah berikut

$ cat /etc/passwd | grep "b[ao]b"

Menggunakan semua opsi yang disediakan sebelumnya, dimungkinkan untuk mengisolasi satu kata dalam file :dengan menggabungkan simbol tanda sisipan dengan simbol dolar.

$ grep "^word$" <file|path>

Beruntung bagi Anda, Anda tidak perlu mengetikkan karakter tersebut setiap kali ingin mencari entri kata tunggal.

Anda dapat menggunakan "-w ” sebagai gantinya.

$ grep -w <expression> <file|path>

Extended Regular Expressions (ERE)

Ekspresi reguler yang diperluas sesuai dengan namanya adalah ekspresi reguler yang menggunakan ekspresi yang lebih kompleks untuk mencocokkan string.

Anda dapat menggunakan ekspresi reguler yang diperluas untuk membuat ekspresi yang akan cocok dengan alamat email misalnya.

Untuk menemukan teks dalam file menggunakan ekspresi reguler yang diperluas, Anda harus menggunakan opsi “-E”.

$ grep -E <expression> <path>

Salah satu penggunaan yang hebat dari ekspresi reguler yang diperluas adalah kemampuan untuk mencari beberapa istilah pencarian misalnya.

Mencari banyak string dalam satu file

Untuk mencari beberapa string dalam file, gunakan “-E ” dan tempatkan istilah penelusuran yang berbeda yang dipisahkan oleh garis lurus (singkatan dari ATAU operator dalam ekspresi reguler )

$ grep -E "text1|text2|text3" <path>

Kembali ke contoh grep sebelumnya, Anda dapat menemukan akun root dan akun bob menggunakan ekspresi reguler yang diperluas.

$ grep -E "root|bob" /etc/passwd

Telusuri alamat IP menggunakan grep

Dalam beberapa kasus, Anda mungkin ingin mengisolasi alamat IP dalam satu file :menggunakan ekspresi reguler yang diperluas adalah cara yang bagus untuk menemukan alamat IP dengan mudah.

Banyak situs web yang berbeda menyediakan ekspresi reguler siap pakai :kami akan menggunakan yang ini untuk alamat IP.

"\b([0-9]{1,3}\.){3}[0-9]{1,3}\b"

Bagaimana Anda membaca ekspresi reguler ini?

Alamat IP terdiri dari 4 angka 3 digit yang dipisahkan oleh titik, persis seperti yang dijelaskan oleh ekspresi reguler ini.

([0-9]{1,3}\.){3}      = 3 3-digits numbers separated by dots

[0-9]{1,3}             = the last 3-digits number ending the IP address

Inilah cara Anda mencari alamat IP menggunakan perintah grep

grep -E "\b([0-9]{1,3}\.){3}[0-9]{1,3}\b" <file|path>

Telusuri alamat URL menggunakan grep

Demikian pula, sangat mungkin untuk mencari alamat URL dalam file jika Anda bekerja dengan administrasi situs web setiap hari.

Sekali lagi, banyak situs web menyediakan ekspresi reguler untuk URL, tetapi kami akan menggunakan yang ini.

grep -E '(http|https)://[^/"]+' <file|path>

Telusuri alamat email menggunakan grep

Terakhir, dimungkinkan untuk mencari alamat email menggunakan ekspresi reguler yang diperluas.

Untuk menemukan alamat email, Anda akan menggunakan ekspresi reguler berikut

grep -E "\b[A-Za-z0-9._%+-][email protected][A-Za-z0-9.-]+\.[A-Za-z]{2,6}\b" <file|path>

Sekarang setelah Anda melihat cara menggunakan ekspresi reguler yang diperluas dengan grep, mari kita lihat bagaimana Anda dapat menemukan teks secara rekursif dalam file menggunakan opsi.

Temukan Teks Secara Rekursif dengan grep

Untuk menemukan teks secara rekursif (artinya menjelajahi setiap direktori dan turunannya) di Linux, Anda harus menggunakan “grep” dengan opsi “-r” (untuk rekursif)

$ grep -R <expression> <path>

Misalnya, untuk mencari semua file yang berisi kata “log” di direktori /var/log, ketikkan

$ grep -R "log$" /var/log

Dengan menggunakan perintah ini, kemungkinan besar Anda akan melihat banyak entri dengan izin yang ditolak.

Untuk mengabaikan entri yang ditolak izin tersebut, alihkan output dari perintah Anda ke /dev/null

$ grep -R "log$" /var/log 2> /dev/null

Untuk menemukan teks secara rekursif, Anda juga dapat menggunakan opsi “-d” dengan tindakan “berulang”.

$ grep -d recurse "log$" /var/log

Mencari teks secara rekursif bisa sangat berguna saat Anda mencoba menemukan file konfigurasi tertentu di sistem Anda.

Mencetak nomor baris dengan grep

Seperti yang Anda lihat pada contoh sebelumnya, kami dapat mengisolasi garis yang cocok dengan pola yang ditentukan.

Lebih dari itu, jika file berisi ribuan baris, akan sulit mengidentifikasi file tetapi bukan nomor barisnya.

Beruntung bagi Anda, opsi grep memiliki opsi untuk mencetak nomor baris bersama dengan kecocokan yang berbeda.

Untuk menampilkan nomor baris menggunakan grep, cukup gunakan tombol “-n ” pilihan.

$ grep -n <expression> <path>

Kembali ke contoh daftar pengguna kami, jika kami ingin tahu di baris mana entri tersebut, kami akan mengetik

$ grep -n -E "root|bob" /etc/passwd

Temukan teks dengan grep menggunakan opsi tidak peka huruf besar/kecil

Dalam beberapa kasus, Anda mungkin tidak yakin apakah teks ditulis dengan huruf besar atau huruf kecil huruf.

Beruntung bagi Anda, perintah grep memiliki opsi untuk mencari teks dalam file menggunakan opsi yang tidak peka huruf besar/kecil.

Untuk menelusuri teks menggunakan opsi tidak peka huruf besar/kecil, cukup gunakan tombol “-i ” pilihan.

$ grep -i <expression> <path>

Kecualikan pola dari grep

Grep digunakan sebagai cara untuk mengidentifikasi file yang berisi file tertentu, tetapi bagaimana jika Anda ingin melakukan yang sebaliknya?

Bagaimana jika Anda ingin menemukan file yang tidak berisi string tertentu di sistem Linux Anda?

Ini adalah tujuan keseluruhan dari opsi pencarian terbalik grep.

Untuk mengecualikan file yang berisi string tertentu, gunakan "grep" dengan opsi "-v".

$ grep -v <expression> <file|path>

Sebagai contoh kecil, katakanlah Anda memiliki tiga file tetapi dua di antaranya berisi kata “log”.

Untuk mengecualikan file tersebut, Anda harus melakukan pencocokan terbalik dengan opsi “-v”.

Tampilkan nama file menggunakan grep

Dalam beberapa kasus, Anda tidak tertarik untuk menemukan teks di dalam file, tetapi hanya dalam nama filenya.

Untuk mencetak hanya nama file, dan bukan nama file dengan keluaran sebenarnya, gunakan opsi “-l”.

$ grep -l <expression> <path>

Menggunakan contoh sebelumnya, kami tidak akan mendapatkan konten file, tetapi hanya nama file.

Kesimpulan

Dalam tutorial ini, Anda mempelajari bagaimana Anda dapat dengan mudah menemukan teks dalam file di Linux.

Anda mengetahui bahwa Anda dapat menggunakan banyak opsi berbeda :ekspresi reguler dasar atau lebih lanjut (diperpanjang) ekspresi reguler jika Anda ingin mencocokkan alamat IP atau nomor telepon misalnya.

Anda juga menemukan bahwa Anda dapat melakukan pencarian terbalik untuk menemukan file bukan mencocokkan pola tertentu di sistem Anda.

Jika Anda tertarik dengan administrasi sistem Linux, kami memiliki bagian lengkap yang didedikasikan untuk itu di situs web, jadi pastikan untuk melihatnya!


Linux
  1. Menggunakan perintah find Linux – Penggunaan dengan contoh

  2. Buat file dengan menggunakan baris perintah di Linux

  3. Cara Menemukan Teks Tertentu menggunakan GREP di Linux

  1. Perintah Linux:Bagaimana cara 'menemukan' hanya file teks?

  2. Bagaimana menemukan file teks yang tidak mengandung teks di Linux?

  3. Menemukan file yang dapat dieksekusi menggunakan ls dan grep

  1. Cara Menggunakan Perintah Grep untuk Menemukan Teks di File

  2. Menggunakan sed untuk menemukan dan mengganti file teks di Linux

  3. Bagaimana cara menemukan semua file yang berisi teks tertentu di Linux?