Saat kami menjalankan perintah tertentu di Unix/Linux untuk membaca atau mengedit teks dari string atau file, kami sering kali mencoba memfilter output ke bagian tertentu yang diinginkan. Di sinilah penggunaan ekspresi reguler berguna.
Baca Juga:10 Operator Rantai Linux Berguna dengan Contoh Praktis
Ekspresi reguler dapat didefinisikan sebagai string yang mewakili beberapa urutan karakter. Salah satu hal terpenting tentang ekspresi reguler adalah memungkinkan Anda untuk memfilter output dari perintah atau file, mengedit bagian teks atau file konfigurasi, dan sebagainya.
Ekspresi reguler terbuat dari:
(.)
itu cocok dengan karakter tunggal apa pun kecuali baris baru.(*)
itu cocok dengan nol atau lebih keberadaan karakter langsung sebelumnya.[ karakter (s) ]
itu cocok dengan salah satu karakter yang ditentukan dalam karakter (s), seseorang juga dapat menggunakan tanda hubung
(-)
berarti berbagai karakter seperti [a-f]
, [1-5]
, dan seterusnya.^
itu cocok dengan awal baris dalam file.$
cocok dengan akhir baris dalam file.\
itu adalah karakter pelarian.Untuk memfilter teks, seseorang harus menggunakan alat pemfilteran teks seperti awk. Anda bisa memikirkan awk sebagai bahasa pemrograman tersendiri. Tetapi untuk ruang lingkup panduan ini untuk menggunakan awk, kita akan membahasnya sebagai alat pemfilteran baris perintah sederhana.
Sintaks umum awk adalah:
# nama file 'skrip' awk.
Di mana 'naskah'
adalah seperangkat perintah yang dipahami oleh awk dan dieksekusi pada file, nama file.
Ia bekerja dengan membaca baris yang diberikan dalam file, membuat salinan dari baris tersebut dan kemudian mengeksekusi skrip pada baris tersebut. Ini diulang pada semua baris dalam file.
NS 'naskah'
dalam bentuk '/pola/tindakan'
di mana pola adalah ekspresi reguler dan tindakan adalah apa yang akan dilakukan awk ketika menemukan pola yang diberikan dalam sebuah garis.
Dalam contoh berikut, kita akan fokus pada karakter meta yang kita bahas di atas di bawah fitur awk.
Contoh di bawah ini mencetak semua baris dalam file /etc/hosts karena tidak ada pola yang diberikan.
#aw'//{print}'/etc/hosts.
Saya contoh di bawah ini, sebuah pola localhost
telah diberikan, jadi awk akan cocok dengan garis yang dimiliki localhost dalam /etc/hosts
mengajukan.
#aw'/localhost/{print}' /etc/hosts
NS (.)
akan cocok dengan string yang mengandung lokasi, localhost, jaringan lokal dalam contoh di bawah ini.
Artinya * l beberapa_karakter_tunggal c *.
#aw'/l.c/{print}' /etc/hosts.
Ini akan cocok dengan string yang mengandung localhost, jaringan lokal, garis, mampu, seperti pada contoh di bawah ini:
#aw'/l*c/{print}' /etc/localhost.
Anda juga akan menyadari bahwa (*)
mencoba memberi Anda kecocokan terpanjang yang dapat dideteksi.
Mari kita lihat kasus yang menunjukkan ini, ambil ekspresi reguler t*t
yang berarti mencocokkan string yang dimulai dengan huruf T
dan diakhiri dengan T
pada baris di bawah ini:
ini adalah tecmint, di mana Anda mendapatkan tutorial terbaik, cara, panduan, tecmint.
Anda akan mendapatkan kemungkinan berikut ketika Anda menggunakan pola: /t*t/
:
ini adalah t. ini adalah tecmint. ini tecmint, di mana Anda mendapatkan t. ini adalah tecmint, di mana Anda mendapatkan yang terbaik t. ini adalah tecmint, di mana Anda mendapatkan tutorial terbaik yang bagus, bagaimana t. ini adalah tecmint, di mana Anda mendapatkan tutorial bagus terbaik, cara, panduan, t. ini adalah tecmint, di mana Anda mendapatkan tutorial terbaik, cara, panduan, tecmint.
Dan (*)
di dalam /t*t/
karakter wild card memungkinkan awk untuk memilih opsi terakhir:
ini adalah tecmint, di mana Anda mendapatkan tutorial terbaik, cara, panduan, tecmint.
Ambil contoh set [al1]
, di sini awk akan cocok dengan semua string yang berisi karakter Sebuah
atau aku
atau 1
dalam satu baris dalam file /etc/hosts.
#aw'/[al1]/{print}' /etc/hosts.
Contoh berikutnya cocok dengan string yang dimulai dengan salah satu dari K
atau k
diikuti oleh T
:
#aw'/[Kk]T/{print}' /etc/hosts
Memahami karakter dengan awk:
[0-9]
berarti satu angka[a-z]
berarti cocok dengan satu huruf kecil[A-Z]
berarti cocok dengan satu huruf besar[a-zA-Z]
berarti cocok dengan satu huruf[a-zA-Z 0-9]
berarti cocok dengan satu huruf atau angkaMari kita lihat contoh di bawah ini:
#aw'/[0-9]/{print}' /etc/hosts
Semua baris dari file /etc/hosts mengandung setidaknya satu nomor [0-9]
dalam contoh di atas.
Ini cocok dengan semua baris yang dimulai dengan pola yang disediakan seperti pada contoh di bawah ini:
#aw'/^fe/{print}' /etc/hosts. #aw'/^ff/{print}' /etc/hosts.
Ini cocok dengan semua baris yang diakhiri dengan pola yang disediakan:
#aw'/ab$/{print}' /etc/hosts. #aw'/ost$/{print}' /etc/hosts. #aw'/rs$/{print}' /etc/hosts.
Ini memungkinkan Anda untuk mengambil karakter yang mengikutinya sebagai literal yang berarti menganggapnya apa adanya.
Pada contoh di bawah ini, perintah pertama mencetak semua baris dalam file, perintah kedua tidak mencetak apa pun karena saya ingin mencocokkan baris yang telah $25.00, tetapi tidak ada karakter escape yang digunakan.
Perintah ketiga benar karena karakter pelarian telah digunakan untuk membaca $ apa adanya.
#aw'//{print}' deal.txt. #aw'/$25.00/{print}' deal.txt. #aw'/\$25.00/{print}' deal.txt.
Itu tidak semua dengan awk alat pemfilteran baris perintah, 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.