GNU/Linux >> Belajar Linux >  >> Linux

Apa itu Perintah Grep di Linux? Mengapa Digunakan dan Bagaimana Cara Kerjanya?

Jika Anda menggunakan Linux untuk pekerjaan biasa atau mengembangkan dan menerapkan perangkat lunak, Anda pasti menemukan perintah grep.

Dalam artikel penjelasan ini, saya akan memberi tahu Anda apa itu perintah grep dan bagaimana cara kerjanya.

Apa itu grep?

Grep adalah utilitas baris perintah di sistem Unix dan Linux. Ini digunakan untuk menemukan pola pencarian dalam konten file tertentu.

Dengan namanya yang tidak biasa, Anda mungkin sudah menebak bahwa grep adalah akronim. Ini setidaknya sebagian benar, tetapi itu tergantung pada siapa Anda bertanya.

Menurut sumber terkemuka, nama tersebut sebenarnya berasal dari perintah di editor teks UNIX yang disebut ed. Di mana, masukan g/re/p melakukan pencarian global (g) untuk ekspresi reguler (re), dan kemudian mencetak (p) setiap baris yang cocok.

Perintah grep melakukan apa yang dilakukan perintah g/re/p di editor. Ia melakukan penelitian global untuk ekspresi reguler dan mencetaknya. Ini jauh lebih cepat dalam mencari file besar.

Ini adalah narasi resmi, tetapi Anda mungkin juga melihatnya digambarkan sebagai G global R biasa E ekspresi (P prosesor | P arser | P pencetak). Sejujurnya, ia melakukan semua itu.

Kisah menarik di balik pembuatan grep

Ken Thompson telah membuat beberapa kontribusi luar biasa untuk ilmu komputer. Dia membantu menciptakan Unix, mempopulerkan pendekatan modularnya, dan menulis banyak programnya termasuk grep.

Thompson membangun grep untuk membantu salah satu rekannya di Bell Labs. Tujuan ilmuwan ini adalah untuk memeriksa pola linguistik untuk mengidentifikasi penulis (termasuk Alexander Hamilton) dari Federalist Papers. Badan kerja yang luas ini adalah kumpulan 85 artikel dan esai anonim yang dirancang untuk membela Konstitusi Amerika Serikat. Tapi karena artikel ini anonim, ilmuwan mencoba mengidentifikasi penulis berdasarkan pola linguistik.

Editor teks Unix asli, ed, (juga dibuat oleh Thompson) tidak mampu mencari teks yang begitu besar mengingat keterbatasan perangkat keras saat itu. Jadi, Thompson mengubah fitur pencarian menjadi utilitas mandiri, terlepas dari editor ed.

Jika dipikir-pikir, itu berarti Alexander Hamilton secara teknis membantu menciptakan grep. Jangan ragu untuk membagikan fakta menyenangkan ini dengan teman-teman Anda di pesta jam tangan Hamilton.

Apa itu Regular Expression lagi?

Ekspresi reguler (atau regex) dapat dianggap seperti kueri penelusuran. Ekspresi reguler digunakan untuk mengidentifikasi, mencocokkan, atau mengelola teks.

Regex mampu melakukan lebih dari sekadar pencarian kata kunci. Ini dapat digunakan untuk menemukan segala jenis pola yang bisa dibayangkan. Pola dapat ditemukan lebih mudah dengan menggunakan meta-karakter. Karakter khusus inilah yang membuat alat pencarian ini jauh lebih canggih.

Perlu dicatat bahwa grep hanyalah salah satu alat yang menggunakan regex. Ada kemampuan serupa di berbagai alat, tetapi karakter meta dan sintaks dapat bervariasi. Ini berarti penting untuk mengetahui aturan untuk prosesor regex khusus Anda.

Contoh praktis grep:Mencocokkan nomor telepon

Alat ini dapat menakutkan bagi pemula dan pengguna Linux yang berpengalaman. Sayangnya, bahkan pola yang relatif sederhana seperti nomor telepon dapat menghasilkan string regex yang tampak "menakutkan".

Saya ingin meyakinkan Anda bahwa tidak perlu panik ketika Anda melihat ekspresi seperti ini. Setelah Anda terbiasa dengan dasar-dasar regex, ini dapat membuka kemungkinan dunia baru untuk komputasi Anda.

Catatan budaya :Contoh ini menggunakan konvensi AS (NANP) untuk nomor telepon. Ini adalah 10 digit ID yang dipecah menjadi kode area (3 digit), dan kombinasi 7 digit unik di mana 3 digit pertama sesuai dengan kantor telekomunikasi pusat (dikenal sebagai awalan) dan 4 terakhir disebut garis nomor. Jadi polanya adalah AAA-PPP-LLLL.

Saya telah membuat file bernama phone.txt dan menuliskan 4 variasi umum dari nomor telepon yang sama. Saya akan menggunakan grep untuk mengenali pola angka apa pun formatnya.

Saya juga telah menambahkan satu baris yang tidak akan sesuai dengan ekspresi untuk digunakan sebagai kontrol. Baris terakhir 555!123!1234 bukan pola nomor telepon standar, dan tidak akan dikembalikan oleh ekspresi grep.

Isi phone.txt file adalah:

[email protected]:~$ cat phone.txt 
5551231234
555 123 1234
555-123-1234
(555)-123-1234
555!123!1234

Untuk "mengambil" nomor telepon, saya akan menulis regex saya menggunakan meta-karakter untuk mengisolasi data yang relevan dan mengabaikan apa yang tidak saya perlukan.

Perintah lengkapnya akan terlihat seperti ini:

[email protected]:~$ grep '\(([0-9]\{3\})\|[0-9]\{3\}\)[ -]\?[0-9]\{3\}[ -]\?[0-9]\{4\}' phone.txt

Terlihat sedikit intens, bukan? Mari kita bagi menjadi beberapa bagian untuk mendapatkan gambaran yang lebih baik tentang apa yang terjadi.

Memahami regex, satu segmen pada satu waktu

Pertama mari kita pisahkan bagian RegEx yang mencari "kode area" di nomor telepon.

Pola serupa diulang sebagian untuk mendapatkan sisa digit juga. Penting untuk dicatat bahwa kode area terkadang dienkapsulasi dalam tanda kurung, jadi Anda perlu memperhitungkannya dengan ekspresi di sini.

Logika dari seluruh bagian kode area dienkapsulasi dalam rangkaian kurung kurawal yang lolos. Anda dapat melihat bahwa kode saya dimulai dengan \( dan diakhiri dengan \) .

Saat Anda menggunakan tanda kurung siku [0-9] , Anda memberi tahu grep bahwa Anda sedang mencari angka antara 0 dan 9. Demikian pula, Anda dapat menggunakan [a-z] untuk mencocokkan huruf alfabet.

Angka dalam kurung kurawal {3\} , berarti item dalam kurung siku cocok tepat tiga kali.

Masih bingung? Jangan stres. Anda akan melihat contoh ini dalam beberapa cara sehingga Anda merasa percaya diri untuk bergerak maju.

Coba kita lihat logika bagian kode area dalam pseudo-code. Saya telah mengisolasi setiap segmen ekspresi.

Kode semu dari Kode Area RegEx

  • \(
  • (Angka 3-Digit)
  • |
  • Angka 3-Digit
  • \)

Mudah-mudahan, melihatnya seperti ini membuat regex lebih mudah. Dalam bahasa sederhana Anda mencari angka 3 digit. Setiap digit bisa 0-9, dan mungkin ada atau tidak boleh ada tanda kurung di sekitar kode area.

Lalu, ada bagian aneh di akhir bagian pertama kita.

  • [ -]\?

Apa artinya? \? simbol berarti "cocok dengan nol atau salah satu karakter sebelumnya". Di sini, itu mengacu pada apa yang ada di dalam tanda kurung [ -] .

Dengan kata lain, mungkin ada atau tidak ada tanda hubung yang mengikuti angka.

Kode Area

Sekarang, mari kita membangun kembali blok yang sama dengan kode yang sebenarnya. Kemudian, saya akan menambahkan bagian lain dari ekspresi.

  • \(
  • ([0-9]\{3\})
  • |
  • [0-9]\{3\}
  • \)
  • [ -]\?

Awalan

Untuk melengkapi pola nomor telepon, Anda dapat menggunakan kembali beberapa kode yang ada.

[0-9]\{3\}[ -]\?

Anda tidak perlu khawatir tentang tanda kurung yang mengelilingi awalan, tetapi Anda mungkin masih memiliki - atau tidak. antara awalan dan digit baris nomor telepon.

Nomor Baris

Bagian terakhir dari nomor telepon tidak mengharuskan kami untuk mencari karakter lain, tetapi Anda perlu memperbarui ekspresi untuk mencerminkan digit tambahan.

[0-9]\{4\}

Itu dia. Sekarang mari kita pastikan bahwa ekspresi tersebut terkandung dalam tanda kutip untuk meminimalkan perilaku yang tidak diharapkan.

Ini lagi ekspresi lengkapnya

[email protected]:~$ grep '\(([0-9]\{3\})\|[0-9]\{3\}\)[ -]\?[0-9]\{3\}[ -]\?[0-9]\{4\}' phone.txt

Anda dapat melihat bahwa hasilnya disorot dalam warna. Ini mungkin bukan perilaku default pada distribusi Linux Anda.

Kiat Bonus

Jika Anda ingin hasil Anda disorot, Anda dapat menambahkan --color=auto untuk perintah Anda. Anda juga dapat menambahkan ini ke profil shell Anda sebagai alias sehingga setiap kali Anda mengetik grep itu berjalan sebagai grep --color=auto .

Saya harap Anda lebih memahami perintah grep sekarang. Saya hanya menunjukkan satu contoh untuk menjelaskan hal-hal tersebut. Jika tertarik, Anda dapat membaca artikel ini untuk contoh yang lebih praktis dari perintah grep.

Berikan saran Anda pada artikel dengan meninggalkan komentar.


Linux
  1. Cara menggunakan perintah grep Linux

  2. Apa itu Server Web, dan Bagaimana Cara Kerja Server Web?

  3. Bagaimana cara mengetahui apa yang dilakukan perintah Linux

  1. Apa itu Makefile dan bagaimana cara kerjanya?

  2. Bagaimana cara kerja perintah 'ls' di Linux/Unix?

  3. Bagaimana cara melihat perintah linux yang paling sering saya gunakan?

  1. Apa itu Perintah Chown di Linux dan Cara Menggunakannya

  2. Apa itu NGINX? Bagaimana cara kerjanya?

  3. Apa itu DNS dan Bagaimana Cara Kerjanya?