ekspresi
Regular adalah alat yang ampuh untuk pemrosesan teks di awk. Mereka memungkinkan Anda untuk mencari pola dalam file teks, dan memanipulasi data berdasarkan pola tersebut. Pada artikel ini, kita akan mengeksplorasi cara menggunakan ekspresi reguler di awk dengan contoh.
AdvertisementDasar-Dasar Ekspresi Reguler
Ekspresi reguler adalah pola yang cocok dengan sekumpulan karakter tertentu. Tabel berikut mencantumkan beberapa karakter meta ekspresi reguler dasar yang dapat Anda gunakan di awk:
MetacharacterDescription.Cocok dengan karakter tunggal mana pun[ ]Cocok dengan karakter apa pun di dalam tanda kurung^Cocok dengan awal baris$Cocok dengan akhir baris*Cocok dengan nol atau lebih banyak kemunculan karakter sebelumnya+Mencocokkan satu atau lebih kemunculan karakter sebelumnya?Mencocokkan nol atau satu kemunculan karakter sebelumnya
Awk menyediakan dua fungsi bawaan untuk menggunakan ekspresi reguler: match() dan sub(). Fungsi match() digunakan untuk menemukan kemunculan pertama ekspresi reguler dalam sebuah string, dan sub() digunakan untuk menggantikan kemunculan pertama ekspresi reguler dalam sebuah string. Berikut beberapa contohnya:
Contoh 1: Mencocokkan Ekspresi Reguler
Katakanlah kita memiliki file yang berisi daftar alamat email, dan kita ingin menemukan semua alamat email yang diakhiri dengan ".com". Kita dapat menggunakan fungsi match() untuk menyelesaikan tugas ini sebagai berikut:
awk `{ if (match($0, /.com$/)) { print $0 } }` email.txt12345awk `{ if (match($0, /.com$/)) { print $0 }}` email.txt
Di sini, kami menggunakan fungsi match() untuk mencari ekspresi reguler /.com$/ (yang cocok dengan string apa pun yang diakhiri dengan “.com”) di setiap baris file. Jika ditemukan kecocokan, kami mencetak baris.
Contoh 2: Mengganti Ekspresi Reguler
Misalkan kami memiliki file yang berisi daftar nomor telepon, dan kami ingin mengganti semua contoh "555" dengan "666". Kita dapat menggunakan fungsi sub() untuk menyelesaikan tugas ini sebagai berikut:
awk `{ sub(/555/, "666", $0) print $0 }` phone.txt1234awk `{ sub(/555/, "666", $0) print $0}` phone.txt
Di sini, kami menggunakan fungsi sub() untuk mencari ekspresi reguler /555/ (yang cocok dengan string apa pun yang berisi “555”) di setiap baris file, dan menggantinya dengan “666” . Kami kemudian mencetak baris yang dimodifikasi.
Teknik Ekspresi Reguler Tingkat Lanjut
Selain karakter meta ekspresi reguler dasar, awk mendukung beberapa teknik ekspresi reguler tingkat lanjut yang dapat membantu Anda menyelesaikan tugas pemrosesan teks yang lebih kompleks. Ini termasuk:
1. Pengelompokan:
Anda dapat mengelompokkan bagian-bagian ekspresi reguler menggunakan tanda kurung. Ini memungkinkan Anda untuk menerapkan quantifier ke grup secara keseluruhan, atau untuk mengekstrak bagian tertentu dari string yang cocok. Nbsp
Katakanlah kita memiliki file yang berisi daftar nama dan gaji karyawan, dan kita ingin mengekstrak nama dan gaji secara terpisah. Kita dapat menggunakan pengelompokan untuk menyelesaikan tugas ini sebagai berikut:
awk `{ if (match($0, /^(w+)s+(d+)$/)) { name = substr($0, RSTART, RLENGTH) salary = substr($0, RSTART+panjang(nama)+1, panjang($0)-RSTART-panjang(nama)) nama cetak cetak gaji } }` karyawan.txt12345678awk `{ if (cocok($0, /^(w+) s+(d+)$/)) { nama = substr($0, RSTART, RLENGTH) gaji = substr($0, RSTART+panjang(nama)+1, panjang($0)-RSTART-panjang(nama)) cetak nama cetak gaji }}` karyawan.txt
Di sini, kami menggunakan pengelompokan untuk mencocokkan ekspresi reguler /^(w+)s+(d+)$/ (yang cocok dengan baris yang berisi satu atau beberapa karakter kata diikuti oleh satu atau beberapa karakter spasi putih, diikuti dengan satu atau lebih digit) dan ekstrak nama dan gaji secara terpisah.
2. Referensi balik:
Anda dapat menggunakan referensi balik (mis., 1, 2, dll.) untuk merujuk ke bagian ekspresi reguler yang cocok dengan grup. Ini memungkinkan Anda untuk menggunakan kembali substring yang cocok di string pengganti.
Katakanlah kita memiliki file yang berisi daftar nomor telepon dalam format (XXX) XXX-XXXX, dan kita ingin mengubah formatnya menjadi XXX-XXX-XXXX. Kita dapat menggunakan referensi balik untuk menyelesaikan tugas ini sebagai berikut:
awk `{ sub(/((d{3})) (d{3})-(d{4})/, "1- 2-3", $0) print $0 }` phone.txt1234awk `{ sub(/((d{3})) (d{3})-(d{4})/, " 1-2-3", $0) print $0}` phone.txt
Di sini, kami menggunakan referensi balik (yaitu, 1, 2, dan 3) untuk merujuk ke tiga grup digit yang cocok dengan ekspresi reguler “ /(d3)(d3) (d{3})-(d{4})/” (yang cocok dengan nomor telepon dalam format (XXX) XXX-XXXX) dan ganti formatnya dengan XXX-XXX -XXXX.
3. Lihat ke depan dan Lihat ke belakang:
Anda dapat menggunakan lihat ke depan (?=) dan lihat ke belakang (?
Referensi tecadmin.comArtikel Diperbarui pada: March 03, 2023
Kontributor: Syauqi Wiryahasana
Model: Haifa Manik Intani