Cara Menggunakan Perintah grep di Linux

grepPerintah Linux adalah utilitas pencocokan string dan pola yang menampilkan baris yang cocok dari banyak file. Ia juga bekerja dengan keluaran yang disalurkan dari perintah lain. Kami tunjukkan caranya.

Kisah Dibalik grep

The grepperintah terkenal di Linux dan Unix lingkaran karena tiga alasan. Pertama, ini sangat berguna. Kedua, banyaknya pilihan bisa sangat banyak. Ketiga, itu ditulis dalam semalam untuk memenuhi kebutuhan tertentu. Dua yang pertama tepat; yang ketiga sedikit melenceng.

Ken Thompson telah mengekstrak kemampuan pencarian ekspresi reguler dari ededitor (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 koleganya, Lee McMahon.

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

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

Pencarian Sederhana Dengan grep

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

Garis yang cocok ditampilkan. Dalam hal ini, ini adalah satu baris. Teks yang cocok disorot. Ini karena pada sebagian besar distro grepmemiliki alias:

alias grep = "grep --colour = auto"

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

grep -i Rata-rata geek-1.log

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

Kita dapat menampilkan baris 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.

Kita bisa membuat grepkita diam sama sekali. Hasilnya diteruskan ke shell sebagai nilai kembali dari grep. Hasil dari nol berarti string itu ditemukan, dan hasil dari salah satu sarana itu tidak ditemukan. Kami dapat memeriksa kode pengembalian menggunakan  $?parameter khusus:

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

Pencarian Rekursif Dengan grep

Untuk mencari melalui 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 mencari di direktori saat ini "." dan setiap subdirektori:

grep -r-memfree.

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

Kita dapat membuat  grep  tautan simbolik ikuti dengan menggunakan opsi -R(dereferensi rekursif). Kami punya tautan simbolis di direktori ini, bernama logs-folder. Itu menunjuk ke /home/dave/logs.

ls -l log-folder

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

grep -R-memfree.

Tautan simbolis diikuti dan direktori yang dituju akan dicari grepjuga.

Mencari Seluruh Kata

Secara default, grepakan cocok dengan satu baris jika target pencarian muncul di mana saja di baris itu, termasuk di dalam string lain. Lihat contoh ini. Kami akan mencari kata "gratis".

grep -i geek-1.log gratis

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

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

grep -w -i geek-1.log gratis
echo $?

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

Menggunakan Beberapa Istilah Pencarian

Opsi -E(regexp diperpanjang) memungkinkan Anda untuk mencari beberapa kata. ( -EOpsi ini menggantikan egrepversi yang tidak digunakan lagi grep.)

Perintah ini menelusuri dua istilah penelusuran, "rata-rata" dan "memfree".

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

Semua baris yang cocok ditampilkan untuk setiap istilah pencarian.

Anda juga dapat mencari beberapa istilah yang belum tentu kata utuh, tetapi bisa juga kata utuh.

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

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

Garis yang Cocok Persis

The  -x(line regexp) hanya akan cocok dengan baris yang seluruh barisnya cocok dengan istilah pencarian. Mari cari stempel 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.

Kebalikan dari itu hanya menampilkan garis yang tidak cocok. Ini dapat berguna saat Anda melihat file konfigurasi. Komentar memang bagus, tetapi terkadang sulit untuk menemukan pengaturan sebenarnya di antara semuanya. Ini /etc/sudoersfilenya:

Kami dapat secara efektif memfilter baris komentar seperti ini:

sudo grep -v "#" / etc / sudoers

Itu jauh lebih mudah untuk diurai.

Hanya Menampilkan Teks yang Cocok

Mungkin ada kalanya Anda tidak ingin melihat seluruh baris yang cocok, hanya teks yang cocok. Opsi -o(satu-satunya yang cocok) 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

greptidak hanya tentang teks, tetapi juga dapat memberikan informasi numerik. Kami dapat grepmenghitung untuk kami dengan berbagai cara. Jika kita ingin mengetahui berapa kali istilah pencarian muncul dalam sebuah file, kita dapat menggunakan opsi -c(hitung).

grep -c rata-rata geek-1.log

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

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

grep -n Jan geek-1.log

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

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

grep -m5 -n Jan geek-1.log

Menambahkan Konteks

Mampu melihat beberapa baris tambahan — mungkin baris yang tidak cocok — untuk setiap baris yang cocok sering kali berguna. ini dapat membantu membedakan baris mana yang cocok yang Anda minati.

Untuk memperlihatkan 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(konteks sebelum).

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

Dan untuk memasukkan garis dari sebelum dan sesudah garis 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 (files with match). Untuk mengetahui file kode sumber C mana yang berisi referensi ke sl.hfile header, gunakan perintah ini:

grep -l "sl.h" * .c

Nama file terdaftar, bukan baris yang cocok.

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

Awal dan Akhir Baris

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

grep "^" geek-1.log

Baris-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

Tampilan menunjukkan garis yang memiliki "00" sebagai karakter akhirnya.

Menggunakan Pipa dengan grep

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

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

grep "ExtractParameters" * .c | kurang

Outputnya disajikan dalam format less.

Ini memungkinkan Anda membuka halaman melalui daftar file dan menggunakan less'sfasilitas pencarian.

Jika kita menyalurkan output dari grepke wcdan menggunakan opsi -l(baris), kita dapat menghitung jumlah baris dalam file kode sumber yang berisi "ExtractParameters". (Kita bisa mencapai ini menggunakan opsi grep-c(hitung), tetapi ini adalah cara yang tepat untuk mendemonstrasikan penyaluran grep.)

grep "ExtractParameters" * .c | wc -l

Dengan perintah berikutnya, kami menyalurkan output dari lske grepdan menyalurkan output dari grepke 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 hancurkan:

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

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

TERKAIT: Cara Menggunakan Pipa di Linux

grep: Sedikit Perintah, Lebih Banyak Sekutu

grepadalah alat yang hebat untuk Anda miliki. Ini berasal dari tahun 1974 dan masih kuat karena kami membutuhkan apa yang dilakukannya, dan tidak ada yang lebih baik.

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

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