GNU/Linux >> Belajar Linux >  >> Linux

Ekspresi Reguler Tingkat Lanjut dalam Perintah Grep dengan 10 Contoh – Bagian II

Dalam artikel ekspresi reguler bagian 1 sebelumnya, kami meninjau reg-ex dasar dengan contoh praktis.

Tapi kita bisa melakukan lebih banyak lagi dengan ekspresi reguler. Anda sering dapat menyelesaikan tugas kompleks dengan satu ekspresi reguler alih-alih menulis beberapa baris kode.

Saat menerapkan regex ke string, mesin regex akan mulai dari karakter pertama string. Ini akan mencoba semua kemungkinan permutasi dari ekspresi reguler pada karakter pertama. Hanya jika semua kemungkinan telah dicoba dan ternyata gagal, mesin regex akan melanjutkan dengan karakter kedua dalam teks.

Regex akan mencoba semua kemungkinan permutasi dari regex, dalam urutan yang persis sama. Hasilnya adalah mesin yang diarahkan regex akan mengembalikan kecocokan paling kiri.

Dalam artikel ini, mari kita tinjau beberapa ekspresi reguler lanjutan dengan contoh.

Contoh 1. Operasi ATAU (|)

Karakter pipa (|) di grep digunakan untuk menentukan bahwa salah satu dari dua subekspresi keseluruhan terjadi dalam suatu posisi. “subexpression1|subexpression2” cocok dengan subexpression1 atau subexpression2.

Contoh berikut akan menghapus tiga jenis baris komentar dalam file menggunakan OR dalam perintah grep.

Pertama, buat file sampel bernama “komentar”.

$ cat comments
This file shows the comment character in various programming/scripting languages
### Perl / shell scripting
If the Line starts with single hash symbol,
then its a comment in Perl and shell scripting.
' VB Scripting comment
The line should start with a single quote to comment in VB scripting.
// C programming single line comment.
Double slashes in the beginning of the line for single line comment in C.

File yang disebut "komentar" memiliki baris komentar perl, skrip VB, dan pemrograman C. Sekarang perintah grep berikut mencari baris yang tidak dimulai dengan # atau tanda kutip tunggal (‘) atau garis miring ganda (//).

$ grep  -v "^#\|^'\|^\/\/" comments
This file shows the comment character in various programming/scripting languages
If the Line starts with single hash symbol,
then its a comment in Perl and shell scripting.
The line should start with a single quote to comment in VB scripting.
Double slashes in the beginning of the line for single line comment in C.

Contoh 2. Ekspresi kelas karakter

Seperti yang telah kita lihat dalam contoh artikel regex sebelumnya 9, daftar karakter dapat disebutkan dalam tanda kurung siku untuk mencocokkan hanya satu dari beberapa karakter. Perintah Grep mendukung beberapa kelas karakter khusus yang menunjukkan rentang umum tertentu. Beberapa dari mereka tercantum di sini. Lihat halaman manual grep untuk mengetahui berbagai ekspresi kelas karakter.

[:digit:] 	Only the digits 0 to 9
[:alnum:] 	Any alphanumeric character 0 to 9 OR A to Z or a to z.
[:alpha:] 	Any alpha character A to Z or a to z.
[:blank:] 	Space and TAB characters only.

Ini selalu digunakan di dalam tanda kurung siku dalam bentuk [[:digit:]]. Sekarang mari kita ambil semua Id proses dari proses daemon ntpd menggunakan ekspresi kelas karakter yang sesuai.

$ grep -e "ntpd\[[[:digit:]]\+\]" /var/log/messages.4
Oct 28 11:42:20 gstuff1 ntpd[2241]: synchronized to LOCAL(0), stratum 10
Oct 28 11:42:20 gstuff1 ntpd[2241]: synchronized to 15.11.13.123, stratum 3
Oct 28 12:33:31 gstuff1 ntpd[2241]: synchronized to LOCAL(0), stratum 10
Oct 28 12:50:46 gstuff1 ntpd[2241]: synchronized to 15.11.13.123, stratum 3
Oct 29 07:55:29 gstuff1 ntpd[2241]: time reset -0.180737 s

Contoh 3. M hingga N kejadian ({m,n})

Ekspresi reguler yang diikuti oleh {m,n} menunjukkan bahwa item sebelumnya cocok setidaknya m kali, tetapi tidak lebih dari n kali. Nilai m dan n harus bukan negatif dan lebih kecil dari 255.

Contoh berikut mencetak garis jika berada dalam kisaran 0 hingga 99999.

$ cat  number
12
12345
123456
19816282

$ grep  "^[0-9]\{1,5\}$" number
12
12345

File bernama “number” memiliki daftar angka, perintah grep di atas hanya cocok dengan angka yang 1 (minimal 0) hingga 5 digit (maksimum 99999).

Catatan :Untuk contoh perintah grep dasar, baca 15 Contoh Perintah Grep Praktis.

Contoh 4. Kejadian M Tepat ({m})

Ekspresi reguler yang diikuti oleh {m} sama persis dengan m kemunculan ekspresi sebelumnya. Perintah grep berikut hanya akan menampilkan angka yang memiliki 5 digit.

$ grep  "^[0-9]\{5\}$" number
12345

Contoh 5. M atau lebih kejadian ({m,})

Ekspresi reguler yang diikuti oleh {m,} cocok dengan m atau lebih kemunculan ekspresi sebelumnya. Perintah grep berikut akan menampilkan angka yang memiliki 5 digit atau lebih.

$ grep "[0-9]\{5,\}" number
12345
123456
19816282

Catatan :Tahukah Anda bahwa Anda dapat menggunakan perintah bzgrep untuk mencari string atau pola (ekspresi reguler) pada file terkompresi bzip2.

Contoh 6. Batas kata (\b)

\b adalah untuk mencocokkan batas kata. \b cocok dengan karakter apa pun di awal (\bxx) dan/atau akhir (xx\b) dari sebuah kata, sehingga \bthe\b akan menemukan tetapi bukan itu, tetapi \bthe akan menemukannya.

# grep -i "\bthe\b" comments
This file shows the comment character in various programming/scripting languages
If the Line starts with single hash symbol,
The line should start with a single quote to comment in VB scripting.
Double slashes in the beginning of the line for single line comment in C.

Contoh 7. Referensi belakang (\n)

Pengelompokan ekspresi untuk penggunaan lebih lanjut tersedia di grep melalui referensi-balik. Misalnya, \([0-9]\)\1 cocok dengan dua digit angka yang kedua digitnya sama seperti 11,22,33 dst.,

# grep -e '^\(abc\)\1$'
abc
abcabc
abcabc

Dalam perintah grep di atas, ia menerima input STDIN. ketika membaca input "abc" itu tidak cocok, Baris "abcabc" cocok dengan ekspresi yang diberikan sehingga dicetak. Jika Anda ingin menggunakan ekspresi reguler yang diperluas, selalu lebih disukai menggunakan perintah egrep. grep dengan opsi -e juga berfungsi seperti egrep, tetapi Anda harus menghindari karakter khusus seperti tanda kurung.

Catatan :Anda juga dapat menggunakan perintah zgrep untuk mencari di dalam file gz terkompresi.

Contoh 8. Cocokkan pola “Object Oriented”

Sejauh ini kita telah melihat tip yang berbeda dalam perintah grep, Sekarang dengan menggunakan tip tersebut, mari kita mencocokkan "berorientasi objek" dalam berbagai format.

$ grep "OO\|\([oO]bject\( \|\-\)[oO]riented\)"

Perintah grep di atas cocok dengan "OO", "berorientasi objek", "berorientasi objek" dan lain-lain,

Contoh 9. Cetak baris “vokal singlecharacter samevowel”

Perintah grep berikut mencetak semua baris yang mengandung vokal (a, e, i, o, atau u) diikuti oleh satu karakter diikuti oleh vokal yang sama lagi. Dengan demikian, ia akan menemukan hawa atau adam tetapi tidak vera.

$ cat input
evening
adam
vera

$ grep "\([aeiou]\).\1" input
evening
adam

Contoh 10. Alamat IP yang valid

Perintah grep berikut hanya cocok dengan alamat IP yang valid.

$ cat input
15.12.141.121
255.255.255
255.255.255.255
256.125.124.124

$ egrep  '\b(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)' input
15.12.141.121
255.255.255.255

Dalam ekspresi reguler yang diberikan di atas, ada kondisi yang berbeda. Pertandingan bersyarat ini harus terjadi tiga kali dan satu kelas lagi disebutkan secara terpisah.

  1. Jika dimulai dengan 25, angka berikutnya harus 0 hingga 5 (250 hingga 255)
  2. Jika dimulai dengan 2, angka berikutnya bisa 0-4 diikuti dengan 0-9 (200 hingga 249)
  3. nol kemunculan 0 atau 1, 0-9, lalu nol kemunculan angka apa pun antara 0-9 (0 hingga 199)
  4. Lalu karakter titik

Untuk bagian pertama artikel ini, baca Regular Expressions di Grep Command dengan 10 Contoh – Bagian I


Linux
  1. Perintah Nohup dengan Contoh

  2. Perintah JQ di Linux dengan Contoh

  3. Bagaimana Anda menggunakan ekspresi reguler dengan perintah cp di Linux?

  1. Perintah wc Linux dengan Contoh

  2. Perintah sortir Linux dengan Contoh

  3. Ekspresi Reguler dalam Perintah Grep dengan 10 Contoh – Bagian I

  1. Perintah Echo di Linux (Dengan Contoh)

  2. Perintah man di Linux dengan Contoh

  3. Perintah AWK di Linux dengan Contoh