GNU/Linux >> Belajar Linux >  >> Linux

Memulai dengan ekspresi reguler

Ekspresi reguler dapat menjadi salah satu alat yang paling kuat di kotak alat Anda sebagai pengguna Linux, administrator sistem, atau bahkan sebagai programmer. Ini juga bisa menjadi salah satu hal yang paling menakutkan untuk dipelajari, tetapi tidak harus begitu! Meskipun ada banyak cara untuk menulis ekspresi, Anda tidak harus mempelajari setiap sakelar dan tanda. Dalam panduan singkat ini, saya akan menunjukkan kepada Anda beberapa cara sederhana untuk menggunakan regex yang akan membuat Anda berjalan dalam waktu singkat dan membagikan beberapa referensi tindak lanjut yang akan menjadikan Anda master regex jika Anda mau.

Ikhtisar singkat

Ekspresi reguler, juga disebut sebagai pola "regex" atau bahkan "pernyataan biasa", dalam istilah sederhana adalah "urutan karakter yang menentukan pola pencarian". Gagasan itu muncul pada 1950-an ketika Stephen Cole Kleene menulis deskripsi tentang gagasan yang disebutnya "bahasa biasa", yang bagiannya kemudian dikenal sebagai "teorema Kleene". Pada tingkat yang sangat tinggi, dikatakan jika elemen bahasa dapat didefinisikan, maka ekspresi dapat ditulis untuk mencocokkan pola dalam bahasa tersebut.

Lebih banyak sumber daya Linux

  • Lembar contekan perintah Linux
  • Lembar contekan perintah Linux tingkat lanjut
  • Kursus online gratis:Ikhtisar Teknis RHEL
  • Lembar contekan jaringan Linux
  • Lembar contekan SELinux
  • Lembar contekan perintah umum Linux
  • Apa itu container Linux?
  • Artikel Linux terbaru kami

Sejak itu, ekspresi reguler telah menjadi bagian dari program Unix paling awal, termasuk vi, sed, awk, grep, dan lainnya. Sebenarnya, kata grep berasal dari perintah yang digunakan pada editor "ed" paling awal, yaitu g/re/p , yang pada dasarnya berarti "lakukan penelusuran global untuk ekspresi reguler ini dan cetak barisnya". Keren!

Mengapa kita membutuhkan ekspresi reguler

Seperti disebutkan di atas, ekspresi reguler digunakan untuk mendefinisikan pola untuk membantu kita mencocokkan atau "menemukan" objek yang cocok dengan pola itu. Objek tersebut dapat berupa file dalam sistem file saat menggunakan find perintah misalnya, atau blok teks dalam file yang mungkin kita cari menggunakan grep, awk, vi, atau sed, misalnya.

Mulai dari dasar

Mari kita mulai dari awal; ini adalah tempat yang sangat baik untuk memulai.

Regex pertama yang tampaknya dipelajari semua orang mungkin sudah Anda ketahui dan tidak menyadarinya. Pernahkah Anda ingin mencetak daftar file dalam direktori, tetapi terlalu panjang? Mungkin Anda pernah melihat seseorang mengetik \*.gif untuk membuat daftar gambar GIF dalam direktori, seperti:

$ ls *.gif

Itu ekspresi reguler!

Saat menulis ekspresi reguler, karakter tertentu memiliki arti khusus untuk memungkinkan kita bergerak dari sekadar mencocokkan karakter menjadi mencocokkan seluruh rangkaian karakter. Dalam hal ini, * karakter, juga disebut "bintang" atau "percikan", menggantikan nama file dan memungkinkan Anda untuk mencocokkan semua file yang diakhiri dengan .gif .

Telusuri pola dalam file

Langkah selanjutnya dalam pelatihan regex foo Anda adalah mencari pola dalam file, terutama menggunakan pola ganti untuk membuat perubahan cepat.

Dua cara umum untuk melakukannya adalah:

  1. Gunakan vi untuk membuka file, mencari pola, dan membuat perubahan (bahkan secara otomatis menggunakan replace).
  2. Gunakan "editor aliran", alias sed, untuk menelusuri secara terprogram di dalam file dan membuat perubahan.

Mari kita mulai dengan mempelajari beberapa regex dengan menggunakan vi untuk mengedit file berikut:

Rubah coklat cepat melompati anjing pemalas.
Tes sederhana
Ujian lebih sulit
Uji coba ekstrem
ABC 123 abc 567
Anjing itu malas

Sekarang, dengan file ini terbuka di vi, mari kita lihat beberapa contoh regex yang akan membantu kita menemukan beberapa string yang cocok di dalam dan bahkan menggantinya secara otomatis.

Untuk mempermudah, mari kita set vi untuk mengabaikan huruf besar/kecil. Ketik set ic untuk mengaktifkan pencarian peka huruf besar/kecil.

Sekarang, untuk mulai mencari di vi, ketik / karakter diikuti dengan pola pencarian Anda.

Menelusuri hal-hal di awal atau akhir baris

Untuk menemukan garis yang dimulai dengan "Sederhana", gunakan pola ekspresi reguler ini:

/^Sederhana

Perhatikan pada gambar di bawah bahwa hanya garis yang dimulai dengan "Sederhana" yang disorot. Simbol karat (^ ) adalah ekspresi ekspresi reguler yang setara dengan "dimulai dengan".

Selanjutnya, mari kita gunakan $ simbol, yang dalam bahasa regex adalah "diakhiri dengan".

/test$

Lihat bagaimana ini menyoroti kedua baris yang diakhiri dengan "test"? Juga, perhatikan bahwa baris keempat memiliki kata test di dalamnya, tetapi tidak di akhir, jadi baris ini tidak disorot.

Ini adalah kekuatan ekspresi reguler, yang memberi Anda kemampuan untuk melihat dengan cepat sejumlah besar kecocokan dengan mudah, tetapi secara khusus menelusuri hanya kecocokan persis.

Uji frekuensi kemunculan

Untuk lebih memperluas keterampilan Anda dalam ekspresi reguler, mari kita lihat beberapa karakter khusus yang lebih umum yang memungkinkan kita untuk mencari tidak hanya teks yang cocok, tetapi juga pola kecocokan.

Karakter pencocokan frekuensi:

Karakter Arti Contoh
* Nol atau lebih ab* – huruf a diikuti oleh nol atau lebih b
+ Satu atau lebih ab+ – huruf a diikuti oleh satu atau lebih b
? Nol atau satu ab? – nol atau hanya satu b
{n} Diberikan sebuah angka, temukan angka yang tepat ab{2} – surat a diikuti dengan tepat dua b
{n,} Diberikan sebuah angka, temukan setidaknya angka tersebut ab{2,} – surat a diikuti oleh setidaknya dua b
{n,y} Diberikan dua angka, temukan rentang angka tersebut ab{1,3} – surat a diikuti oleh antara satu dan tiga b

Temukan kelas karakter

Langkah selanjutnya dalam pelatihan regex adalah menggunakan kelas karakter dalam pencocokan pola kita. Yang penting untuk diperhatikan di sini adalah bahwa kelas-kelas ini dapat digabungkan baik sebagai daftar, seperti [a,d,x,z] , atau sebagai rentang, seperti [a-z] , dan karakter tersebut biasanya peka huruf besar/kecil.

Untuk melihat ini berfungsi di vi, kita harus mematikan kasus abaikan yang kita atur sebelumnya. Mari kita ketik:set noic untuk menonaktifkan lagi kasus abaikan.

Beberapa kelas karakter umum yang digunakan sebagai rentang adalah:

  • a-z – semua karakter huruf kecil
  • A-Z – semua karakter UPPERCASE
  • 0-9 – angka

Sekarang, mari kita coba pencarian yang mirip dengan yang kita jalankan sebelumnya:

/tT

Apakah Anda memperhatikan bahwa ia tidak menemukan apa-apa? Itu karena ekspresi reguler sebelumnya mencari "tT." Jika kita menggantinya dengan:

/[tT]

Kita akan melihat bahwa huruf kecil dan huruf besar T cocok di seluruh dokumen.

Sekarang, mari kita rantai beberapa rentang kelas bersama-sama dan lihat apa yang kita dapatkan. Coba:

/[A-Z1-3]

Perhatikan bahwa huruf kapital dan 123 disorot, tetapi bukan huruf kecil (termasuk akhir baris lima).

Bendera

Langkah terakhir dalam pelatihan regex awal Anda adalah memahami tanda yang ada untuk menelusuri jenis karakter khusus tanpa perlu mencantumkannya dalam rentang.

  • . – karakter apa saja
  • \s – spasi
  • \w – kata
  • \d – digit (angka)

Misalnya, untuk menemukan semua digit dalam teks contoh, gunakan:

/\d

Perhatikan pada contoh di bawah ini bahwa semua nomor disorot.

Untuk mencocokkan sebaliknya, Anda biasanya menggunakan flag yang sama, tetapi dalam UPPERCASE. Misalnya:

  • \S – bukan spasi
  • \W – bukan sepatah kata pun
  • \D – bukan angka

Perhatikan pada contoh di bawah ini bahwa dengan menggunakan \D , semua karakter KECUALI angka yang disorot.

Mencari dengan sed

Catatan singkat tentang sed:Ini adalah editor aliran, yang berarti Anda tidak berinteraksi dengan antarmuka pengguna. Dibutuhkan aliran yang datang di satu sisi dan menuliskannya di sisi lain.

Menggunakan sed sangat mirip dengan vi, kecuali bahwa Anda memberikan regex untuk mencari dan mengganti, dan mengembalikan output. Misalnya:

contoh s/anjing/kucing/

akan mengembalikan yang berikut ke layar:

Jika Anda ingin menyimpan file itu, itu hanya sedikit lebih rumit. Anda perlu menggabungkan beberapa perintah untuk a) menulis file itu, dan b) menyalinnya di atas file pertama.

Untuk melakukannya, coba:

sed s/anjing/kucing/ contoh> temp.out; contoh mv temp.out

Sekarang, jika Anda melihat examples file, Anda akan melihat bahwa kata "anjing" telah diganti.

Rubah coklat cepat melompati kucing malas.
Tes sederhana
Tes lebih sulit
Uji coba ekstrem
ABC 123 abc 567
Kucing itu malas

Untuk informasi lebih lanjut

Saya harap ini adalah gambaran umum yang bermanfaat tentang ekspresi reguler. Tentu saja, ini hanyalah puncak gunung es, dan saya harap Anda akan terus mempelajari alat canggih ini dengan meninjau sumber daya tambahan di bawah.

Di mana mendapatkan bantuan

  • Sumber daya favorit saya adalah Referensi Saku PERL
  • Untuk penguasaan lanjutan ekspresi reguler, lihat Menguasai Ekspresi Reguler oleh Jeff Friedl

Untuk contoh lainnya, lihat

  • Cara menemukan file di Linux
  • Validasi data di Perl dengan Regexp::Common
  • 7 alasan untuk mencintai Vim

Linux
  1. Memulai dengan Zsh

  2. Memulai dengan ekspresi reguler:Sebuah contoh

  3. Memulai Samba untuk interoperabilitas

  1. Memulai dengan ls

  2. Memulai PostgreSQL di Linux

  3. Memulai SSH di Linux

  1. Memulai dengan GnuCash

  2. Memulai dengan Etcher.io

  3. Cara:Memulai dengan Ansible