Cara Menggunakan Awk dan Ekspresi Reguler untuk Memfilter Teks atau String di File


Saat kami menjalankan perintah tertentu di Unix/Linux untuk membaca atau mengedit teks dari string atau file, kami sering kali mencoba memfilter keluaran ke bagian tertentu yang diinginkan. Di sinilah penggunaan ekspresi reguler berguna.

Baca Juga: 10 Operator Chaining Linux yang Berguna dengan Contoh Praktis

Apa itu Ekspresi Reguler?

Ekspresi reguler dapat didefinisikan sebagai string yang mewakili beberapa rangkaian karakter. Salah satu hal terpenting tentang ekspresi reguler adalah ekspresi reguler memungkinkan Anda memfilter keluaran perintah atau file, mengedit bagian teks atau file konfigurasi, dan sebagainya.

Fitur Ekspresi Reguler

Ekspresi reguler terbuat dari:

  1. Karakter biasa seperti spasi, garis bawah(_), A-Z, a-z, 0-9.
  2. Karakter meta yang diperluas ke karakter biasa, meliputi:

    1. (.) cocok dengan karakter apa pun kecuali baris baru.
    2. (*) cocok dengan nol atau lebih keberadaan karakter langsung yang mendahuluinya.
    3. [ karakter ] cocok dengan salah satu karakter yang ditentukan dalam karakter, kita juga dapat menggunakan tanda hubung (-) yang berarti rentang karakter seperti itu seperti [a-f], [1-5], dan seterusnya.
    4. ^ cocok dengan awal baris dalam file.
    5. $ cocok dengan akhir baris dalam file.
    6. \ itu adalah karakter pelarian.

Untuk memfilter teks, kita harus menggunakan alat pemfilteran teks seperti awk. Anda dapat menganggap awk sebagai bahasa pemrograman tersendiri. Namun untuk cakupan panduan penggunaan awk ini, kami akan membahasnya sebagai alat pemfilteran baris perintah sederhana.

Sintaks umum awk adalah:

awk 'script' filename

Dimana 'script' adalah sekumpulan perintah yang dipahami oleh awk dan dijalankan pada file, nama file.

Ia bekerja dengan membaca baris tertentu dalam file, membuat salinan baris tersebut dan kemudian mengeksekusi skrip pada baris tersebut. Ini diulangi pada semua baris dalam file.

'script' berbentuk '/pattern/ action' dengan pattern adalah ekspresi reguler dan action adalah apa yang awk akan lakukan ketika menemukan pola yang diberikan dalam sebuah garis.

Cara Menggunakan Alat Penyaringan Awk di Linux

Dalam contoh berikut, kita akan fokus pada karakter meta yang kita bahas di atas pada fitur awk.

Contoh sederhana penggunaan awk:

Contoh di bawah mencetak semua baris dalam file /etc/hosts karena tidak ada pola yang diberikan.

awk '//{print}'/etc/hosts

Gunakan Awk dengan Pola:

Pada contoh di bawah, pola localhost telah diberikan, jadi awk akan mencocokkan baris yang memiliki localhost di file /etc/hosts.

awk '/localhost/{print}' /etc/hosts 

Menggunakan Awk dengan (.) wild card dalam suatu Pola

(.) akan cocok dengan string yang berisi loc, localhost, localnet pada contoh di bawah.

Artinya * l some_single_character c *.

awk '/l.c/{print}' /etc/hosts

Menggunakan Awk dengan (*) Karakter dalam suatu Pola

Ini akan cocok dengan string yang berisi localhost, localnet, lines, capable, seperti pada contoh di bawah ini:

awk '/l*c/{print}' /etc/localhost

Anda juga akan menyadari bahwa (*) mencoba memberikan Anda kecocokan terpanjang yang dapat dideteksinya.

Mari kita lihat kasus yang menunjukkan hal ini, ambil ekspresi reguler t*t yang berarti mencocokkan string yang dimulai dengan huruf t dan diakhiri dengan t pada baris di bawah ini:

this is tecmint, where you get the best good tutorials, how to's, guides, tecmint. 

Anda akan mendapatkan kemungkinan berikut ketika Anda menggunakan pola /t*t/:

this is t
this is tecmint
this is tecmint, where you get t
this is tecmint, where you get the best good t
this is tecmint, where you get the best good tutorials, how t
this is tecmint, where you get the best good tutorials, how tos, guides, t
this is tecmint, where you get the best good tutorials, how tos, guides, tecmint

Dan (*) dalam karakter wild card /t*t/ memungkinkan awk memilih opsi terakhir:

this is tecmint, where you get the best good tutorials, how to's, guides, tecmint

Menggunakan Awk dengan set [ karakter ]

Ambil contoh himpunan [al1], di sini awk akan mencocokkan semua string yang mengandung karakter a atau l atau 1 dalam satu baris di file /etc/hosts.

awk '/[al1]/{print}' /etc/hosts

Contoh berikutnya mencocokkan string yang dimulai dengan K atau k diikuti dengan T:

awk '/[Kk]T/{print}' /etc/hosts 

Menentukan Karakter dalam Rentang

Memahami karakter dengan awk:

  1. [0-9] berarti satu angka
  2. [a-z] artinya cocok dengan satu huruf kecil
  3. [A-Z] artinya cocok dengan satu huruf besar
  4. [a-zA-Z] artinya cocok dengan satu huruf
  5. [a-zA-Z 0-9] artinya cocok dengan satu huruf atau angka

Mari kita lihat contoh di bawah ini:

awk '/[0-9]/{print}' /etc/hosts 

Semua baris dari file /etc/hosts berisi setidaknya satu nomor [0-9] pada contoh di atas.

Gunakan Awk dengan (^) Karakter Meta

Ini cocok dengan semua baris yang dimulai dengan pola yang diberikan seperti pada contoh di bawah ini:

awk '/^fe/{print}' /etc/hosts
awk '/^ff/{print}' /etc/hosts

Gunakan Awk dengan ($) Karakter Meta

Itu cocok dengan semua garis yang diakhiri dengan pola yang disediakan:

awk '/ab$/{print}' /etc/hosts
awk '/ost$/{print}' /etc/hosts
awk '/rs$/{print}' /etc/hosts

Gunakan Awk dengan (\) Karakter Escape

Ini memungkinkan Anda untuk mengambil karakter yang mengikutinya sebagai literal, artinya menganggapnya apa adanya.

Pada contoh di bawah, perintah pertama mencetak semua baris dalam file, perintah kedua tidak mencetak apa pun karena saya ingin mencocokkan baris yang memiliki $25.00, tetapi tidak ada karakter escape yang digunakan.

Perintah ketiga benar karena karakter escape telah digunakan untuk membaca $ apa adanya.

awk '//{print}' deals.txt
awk '/$25.00/{print}' deals.txt
awk '/\$25.00/{print}' deals.txt

Ringkasan

Itu belum semuanya dengan alat pemfilteran baris perintah awk, contoh di atas adalah operasi dasar awk. Di bagian selanjutnya kita akan membahas cara menggunakan fitur kompleks awk. Terima kasih telah membaca dan untuk tambahan atau klarifikasi apa pun, kirimkan komentar di bagian komentar.