Cara Menggunakan Perintah grep di Linux

Diterbitkan: 2022-01-29
Prompt terminal pada PC Linux.
Fatmawati Achmad Zaenuri/Shutterstock

Perintah grep Linux adalah utilitas pencocokan string dan pola yang menampilkan baris yang cocok dari banyak file. Ini juga berfungsi dengan output pipa dari perintah lain. Kami tunjukkan caranya.

Kisah Dibalik grep

Perintah grep terkenal di kalangan Linux dan Unix karena tiga alasan. Pertama, ini sangat berguna. Kedua, kekayaan pilihan bisa sangat banyak. Ketiga, ditulis dalam semalam untuk memenuhi kebutuhan tertentu. Dua yang pertama menggedor; ketiga adalah sedikit off.

Ken Thompson telah mengekstrak kemampuan pencarian ekspresi reguler dari editor ed (diucapkan ee-dee) dan membuat program kecil—untuk digunakan sendiri—untuk mencari melalui file teks. Kepala departemennya di Bell Labs, Doug Mcilroy, mendekati Thompson dan menjelaskan masalah yang dihadapi salah satu rekannya, Lee McMahon.

10 Perintah Dasar Linux untuk Pemula
TERKAIT 10 Perintah Dasar Linux untuk Pemula

McMahon mencoba mengidentifikasi penulis makalah Federalis melalui analisis tekstual. Dia membutuhkan alat yang bisa mencari frase dan string dalam file teks. Thompson menghabiskan sekitar satu jam malam itu untuk membuat alatnya menjadi utilitas umum yang dapat digunakan oleh orang lain dan menamainya grep . Dia mengambil nama dari string perintah ed g/re/p , yang diterjemahkan sebagai "pencarian ekspresi reguler global."

Anda dapat menonton Thompson berbicara dengan Brian Kernighan tentang kelahiran grep .

Pencarian Sederhana Dengan grep

Untuk mencari string dalam file, berikan istilah pencarian dan nama file pada baris perintah:

grep dave /etc/password di terminal widnow
Iklan

Garis yang cocok ditampilkan. Dalam hal ini, itu adalah satu baris. Teks yang cocok disorot. Ini karena pada sebagian besar distribusi grep adalah alias untuk:

 alias grep='grep --colour=auto'

Mari kita lihat hasil di mana ada beberapa baris yang cocok. Kami akan mencari kata "Rata-rata" dalam file log aplikasi. Karena kami tidak dapat mengingat apakah kata tersebut dalam huruf kecil di file log, kami akan menggunakan opsi -i (abaikan huruf besar-kecil):

 grep -i Rata-rata geek-1.log 

Setiap baris yang cocok ditampilkan, dengan teks yang cocok disorot di masing-masing baris.

Kita dapat menampilkan garis yang tidak cocok dengan menggunakan opsi -v (invert match).

 grep -v Mem geek-1.log 

Tidak ada penyorotan karena ini adalah garis yang tidak cocok.

Iklan

Kami dapat menyebabkan grep menjadi benar-benar diam. Hasilnya diteruskan ke shell sebagai nilai balik dari grep . Hasil nol berarti string ditemukan , dan hasil satu berarti tidak ditemukan. Kami dapat memeriksa kode pengembalian menggunakan $? parameter khusus:

 grep -q rata-rata geek-1.log
 gema $?
 grep -q howtogeek geek-1.log
 gema $? 

Pencarian Rekursif Dengan grep

Untuk menelusuri direktori dan subdirektori bersarang, gunakan opsi -r (rekursif). Perhatikan bahwa Anda tidak memberikan nama file pada baris perintah, Anda harus memberikan jalur. Di sini kami sedang mencari di direktori saat ini "." dan setiap subdirektori:

 grep -r -i memfree . 

Outputnya termasuk direktori dan nama file dari setiap baris yang cocok.

Kita dapat membuat grep mengikuti tautan simbolik dengan menggunakan opsi -R (recursive dereference). Kami memiliki tautan simbolis di direktori ini, yang disebut logs-folder . Ini menunjuk ke /home/dave/logs .

 ls -l log-folder 

Mari kita ulangi pencarian terakhir kita dengan opsi -R (recursive dereference):

 grep -R -i memfree . 

Tautan simbolis diikuti dan direktori yang ditunjuknya juga dicari oleh grep .

Mencari Seluruh Kata

Secara default, grep akan mencocokkan baris jika target pencarian muncul di mana saja di baris itu, termasuk di dalam string lain. Lihat contoh ini. Kita akan mencari kata "gratis".

 grep -i free geek-1.log 

Iklan

Hasilnya adalah baris yang memiliki string "bebas" di dalamnya, tetapi itu bukan kata yang terpisah. Mereka adalah bagian dari string "MemFree."

Untuk memaksa grep untuk mencocokkan "kata" yang terpisah saja, gunakan opsi -w (word regexp).

 grep -w -i free geek-1.log
 gema $? 

Kali ini tidak ada hasil karena istilah pencarian "gratis" tidak muncul dalam file sebagai kata terpisah.

Menggunakan Beberapa Istilah Pencarian

Opsi -E (extended regexp) memungkinkan Anda mencari beberapa kata. (Opsi -E menggantikan versi grep egrep yang sudah tidak digunakan lagi.)

Perintah ini mencari dua istilah pencarian, "rata-rata" dan "memfree."

 grep -E -w -i "rata-rata|memfree" geek-1.log 

Iklan

Semua baris yang cocok ditampilkan untuk setiap istilah pencarian.

Anda juga dapat mencari beberapa istilah yang tidak harus berupa kata utuh, tetapi juga dapat berupa kata utuh.

Opsi -e (pola) memungkinkan Anda menggunakan beberapa istilah pencarian di baris perintah. Kami menggunakan fitur braket ekspresi reguler untuk membuat pola pencarian. Ini memberitahu grep untuk mencocokkan salah satu karakter yang ada di dalam tanda kurung “[].” Ini berarti grep akan cocok dengan "kB" atau "KB" saat mencari.

Kedua string cocok, dan, pada kenyataannya, beberapa baris berisi kedua string.

Mencocokkan Garis dengan Tepat

-x (line regexp) hanya akan cocok dengan baris yang seluruh barisnya cocok dengan istilah pencarian. Mari kita cari cap tanggal dan waktu yang kita tahu hanya muncul sekali di file log:

 grep -x "20-Jan--06 15:24:35" geek-1.log 

Satu baris yang cocok ditemukan dan ditampilkan.

Kebalikannya hanya menunjukkan garis yang tidak cocok. Ini dapat berguna saat Anda melihat file konfigurasi. Komentarnya bagus, tetapi terkadang sulit untuk menemukan pengaturan sebenarnya di antara semuanya. Inilah file /etc/sudoers :

Iklan

Kami dapat secara efektif menyaring baris komentar seperti ini:

 sudo grep -v "#" /etc/sudoers 

Itu jauh lebih mudah untuk diurai.

Hanya Menampilkan Teks yang Cocok

Mungkin ada saat ketika Anda tidak ingin melihat seluruh baris yang cocok, hanya teks yang cocok. Opsi -o (hanya pencocokan) melakukan hal itu.

 grep -o MemFree geek-1.log 

Tampilan dikurangi menjadi hanya menampilkan teks yang cocok dengan istilah pencarian, bukan seluruh baris yang cocok.

Menghitung Dengan grep

grep bukan hanya tentang teks, tetapi juga dapat memberikan informasi numerik. Kita dapat membuat grep diperhitungkan untuk kita dengan cara yang berbeda. Jika kita ingin mengetahui berapa kali istilah pencarian muncul dalam sebuah file, kita dapat menggunakan opsi -c (count).

 grep -c rata-rata geek-1.log 

grep melaporkan bahwa istilah pencarian muncul 240 kali dalam file ini.

Anda dapat membuat grep menampilkan nomor baris untuk setiap baris yang cocok dengan menggunakan opsi -n (nomor baris).

 grep -n Jan geek-1.log 

Iklan

Nomor baris untuk setiap baris yang cocok ditampilkan di awal baris.

Untuk mengurangi jumlah hasil yang ditampilkan, gunakan opsi -m (jumlah maksimum). Kami akan membatasi output menjadi lima baris yang cocok:

 grep -m5 -n Jan geek-1.log 

Menambahkan Konteks

Mampu melihat beberapa garis tambahan—mungkin garis yang tidak cocok—untuk setiap garis yang cocok seringkali berguna. ini dapat membantu membedakan mana dari garis yang cocok yang Anda minati.

Untuk menampilkan beberapa baris setelah baris yang cocok, gunakan opsi -A (setelah konteks). Kami meminta tiga baris dalam contoh ini:

 grep -A 3 -x "20-Jan-06 15:24:35" geek-1.log 

Untuk melihat beberapa baris dari sebelum baris yang cocok, gunakan opsi -B (context before).

 grep -B 3 -x "20-Jan-06 15:24:35" geek-1.log 

Dan untuk memasukkan baris dari sebelum dan sesudah baris yang cocok gunakan opsi -C (konteks).

 grep -C 3 -x "20-Jan-06 15:24:35" geek-1.log 

Menampilkan File yang Cocok

Untuk melihat nama file yang berisi istilah pencarian, gunakan opsi -l (file dengan kecocokan). Untuk mengetahui file kode sumber C mana yang berisi referensi ke file header sl.h , gunakan perintah ini:

 grep -l "sl.h" *.c 

Nama file terdaftar, bukan baris yang cocok.

Iklan

Dan tentu saja, kita dapat mencari file yang tidak mengandung istilah pencarian. Opsi -L (file tanpa kecocokan) melakukan hal itu.

 grep -L "sl.h" *.c 

Garis Awal dan Akhir

Kami dapat memaksa grep untuk hanya menampilkan kecocokan yang ada di awal atau akhir baris. Operator ekspresi reguler “^” cocok dengan awal baris. Hampir semua baris dalam file log akan berisi spasi, tetapi kita akan mencari baris yang memiliki spasi sebagai karakter pertamanya:

 grep "^ " geek-1.log 

Baris yang memiliki spasi sebagai karakter pertama—di awal baris—akan ditampilkan.

Untuk mencocokkan akhir baris, gunakan operator ekspresi reguler “$”. Kami akan mencari baris yang diakhiri dengan "00."

 grep "00$" geek-1.log 

Layar menunjukkan garis yang memiliki "00" sebagai karakter terakhirnya.

Menggunakan Pipa dengan grep

Tentu saja, Anda dapat menyalurkan input ke grep , menyalurkan output dari grep ke program lain, dan menempatkan grep di tengah rantai pipa.

Iklan

Katakanlah kita ingin melihat semua kemunculan string “ExtractParameters” di file kode sumber C kita. Kami tahu akan ada beberapa, jadi kami menyalurkan output ke less :

 grep "ExtractParameters" *.c | lebih sedikit 

Outputnya disajikan dalam less .

Ini memungkinkan Anda menelusuri daftar file dan menggunakan less's fasilitas pencarian.

Jika kita menyalurkan output dari grep ke wc dan menggunakan opsi -l (baris), kita dapat menghitung jumlah baris dalam file kode sumber yang berisi "ExtractParameters". (Kita dapat mencapai ini menggunakan opsi grep -c (count), tetapi ini adalah cara yang rapi untuk mendemonstrasikan pemipaan dari grep .)

 grep "ExtractParameters" *.c | wc -l 

Dengan perintah berikutnya, kita menyalurkan output dari ls ke grep dan menyalurkan output dari grep ke sort . Kami membuat daftar file di direktori saat ini, memilih yang memiliki string "Aug" di dalamnya, dan mengurutkannya berdasarkan ukuran file:

 ls -l | grep "Agustus" | urutkan +4n 

Mari kita uraikan:

  • ls -l : Lakukan daftar format panjang file menggunakan ls .
  • grep “Aug” : Pilih baris dari daftar ls yang memiliki “Aug” di dalamnya. Perhatikan bahwa ini juga akan menemukan file yang memiliki "Aug" di namanya.
  • sort +4n : Mengurutkan output dari grep pada kolom keempat (ukuran file).

Kami mendapatkan daftar terurut dari semua file yang dimodifikasi pada bulan Agustus (terlepas dari tahun), dalam urutan menaik dari ukuran file.

TERKAIT: Cara Menggunakan Pipa di Linux

grep: Lebih Sedikit Perintah, Lebih Banyak Sebagai Sekutu

grep adalah alat yang hebat untuk Anda miliki. Itu berasal dari tahun 1974 dan masih kuat karena kita membutuhkan apa yang dilakukannya, dan tidak ada yang lebih baik.

Menggabungkan grep dengan beberapa ekspresi reguler-fu benar-benar membawanya ke tingkat berikutnya.

TERKAIT: Cara Menggunakan Ekspresi Reguler Dasar untuk Mencari Lebih Baik dan Menghemat Waktu

TERKAIT: Laptop Linux Terbaik untuk Pengembang dan Penggemar