GNU/Linux >> Belajar Linux >  >> Linux

Ekspresi Reguler di Grep (Regex)

grep adalah salah satu perintah yang paling berguna dan kuat di Linux untuk pemrosesan teks. grep mencari satu atau lebih file input untuk baris yang cocok dengan ekspresi reguler dan menulis setiap baris yang cocok ke output standar.

Dalam artikel ini, kita akan menjelajahi dasar-dasar cara menggunakan ekspresi reguler di grep versi GNU , yang tersedia secara default di sebagian besar sistem operasi Linux.

Grep Regular Expression #

Ekspresi reguler atau regex adalah pola yang cocok dengan sekumpulan string. Sebuah pola terdiri dari operator, konstruksi karakter literal, dan karakter meta, yang memiliki arti khusus. GNU grep mendukung tiga sintaks ekspresi reguler, Basic, Extended, dan Perl-compatible.

Dalam bentuknya yang paling sederhana, ketika tidak ada tipe ekspresi reguler yang diberikan, grep menafsirkan pola pencarian sebagai ekspresi reguler dasar. Untuk menafsirkan pola sebagai ekspresi reguler yang diperluas, gunakan -E ( atau --extended-regexp ) pilihan.

Dalam implementasi GNU dari grep tidak ada perbedaan fungsional antara sintaks ekspresi reguler dasar dan diperpanjang. Satu-satunya perbedaan adalah bahwa dalam ekspresi reguler dasar meta-karakter ? , + , { , | , ( , dan ) ditafsirkan sebagai karakter literal. Untuk menjaga arti khusus meta-karakter saat menggunakan ekspresi reguler dasar, karakter harus diloloskan dengan garis miring terbalik (\ ). Kami akan menjelaskan arti dari ini dan meta-karakter lainnya nanti.

Umumnya, Anda harus selalu menyertakan ekspresi reguler dalam tanda kutip tunggal untuk menghindari interpretasi dan perluasan karakter meta oleh shell.

Kecocokan Literal #

Penggunaan paling dasar dari grep perintah untuk mencari karakter literal atau rangkaian karakter dalam file. Misalnya, untuk menampilkan semua baris yang berisi string “bash” di /etc/passwd file, Anda akan menjalankan perintah berikut:

grep bash /etc/passwd

Outputnya akan terlihat seperti ini:

root:x:0:0:root:/root:/bin/bash
linuxize:x:1000:1000:linuxize:/home/linuxize:/bin/bash

Dalam contoh ini, string "bash" adalah ekspresi reguler dasar yang terdiri dari empat karakter literal. Ini memberitahu grep untuk mencari string yang memiliki "b" segera diikuti oleh "a", "s", dan "h".

Secara default, grep perintah peka huruf besar-kecil. Ini berarti bahwa karakter huruf besar dan kecil diperlakukan berbeda.

Untuk mengabaikan huruf besar/kecil saat mencari, gunakan -i opsi (atau --ignore-case ).

Penting untuk dicatat bahwa grep mencari pola pencarian sebagai string, bukan kata. Jadi jika Anda mencari “gnu”, grep juga akan mencetak baris di mana "gnu" disematkan dalam kata-kata yang lebih besar, seperti "cygnus" atau "magnum".

Jika string pencarian menyertakan spasi, Anda harus menyertakannya dalam tanda kutip tunggal atau ganda:

grep "Gnome Display Manager" /etc/passwd

Penahan #

Jangkar adalah meta-karakter yang memungkinkan Anda menentukan di mana dalam baris kecocokan harus ditemukan.

^ (tanda sisipan) simbol cocok dengan string kosong di awal baris. Dalam contoh berikut, string “linux” hanya akan cocok jika muncul di awal baris.

grep '^linux' file.txt

$ (dolar) simbol cocok dengan string kosong di awal baris. Untuk menemukan baris yang diakhiri dengan string “linux”, Anda dapat menggunakan:

grep 'linux$' file.txt

Anda juga dapat membuat ekspresi reguler menggunakan kedua jangkar. Misalnya, untuk menemukan baris yang hanya berisi “linux”, jalankan:

grep '^linux$' file.txt

Contoh berguna lainnya adalah ^$ pola yang cocok dengan semua baris kosong.

Mencocokkan Karakter Tunggal #

. (titik) simbol adalah meta-karakter yang cocok dengan setiap karakter tunggal. Misalnya, untuk mencocokkan apa pun yang dimulai dengan “kan” kemudian memiliki dua karakter dan diakhiri dengan string “roo”, Anda akan menggunakan pola berikut:

grep 'kan..roo' file.txt

Ekspresi Bracket #

Ekspresi tanda kurung memungkinkan pencocokan sekelompok karakter dengan menyertakannya dalam tanda kurung [] . Misalnya, temukan baris yang berisi "terima" atau "aksen", Anda dapat menggunakan ekspresi berikut:

grep 'acce[np]t' file.txt

Jika karakter pertama di dalam tanda kurung adalah tanda sisipan ^ , lalu cocok dengan karakter tunggal apa pun yang tidak terlampir dalam tanda kurung. Pola berikut akan cocok dengan kombinasi string apa pun yang dimulai dengan "co" diikuti oleh huruf apa pun kecuali "l" diikuti oleh "la", seperti "coca", "cobalt" dan seterusnya, tetapi tidak akan cocok dengan garis yang mengandung "cola ”:

grep 'co[^l]a' file.txt

Alih-alih menempatkan karakter satu per satu, Anda dapat menentukan rentang karakter di dalam tanda kurung. Ekspresi rentang dibuat dengan menentukan karakter pertama dan terakhir dari rentang yang dipisahkan oleh tanda hubung. Misalnya, [a-a] setara dengan [abcde] dan [1-3] setara dengan [123] .

Ekspresi berikut cocok dengan setiap baris yang dimulai dengan huruf kapital:

grep '^[A-Z]' file.txt

grep juga mendukung kelas karakter yang telah ditentukan sebelumnya yang diapit tanda kurung. Tabel berikut menunjukkan beberapa kelas karakter yang paling umum:

Penghitungan Kelas Karakter
[:alnum:] Karakter alfanumerik.
[:alpha:] Karakter alfabet.
[:blank:] Spasi dan tab.
[:digit:] Digit.
[:lower:] Huruf kecil.
[:upper:] Huruf besar.

Untuk daftar lengkap semua kelas karakter, periksa manual Grep.

Penghitung #

Quantifier memungkinkan Anda untuk menentukan jumlah kemunculan item yang harus ada agar kecocokan terjadi. Tabel berikut menunjukkan quantifier yang didukung oleh GNU grep :

Penghitungan Deskripsi
* Cocokkan item sebelumnya nol kali atau lebih.
? Cocokkan item sebelumnya nol atau satu kali.
+ Cocokkan item sebelumnya satu kali atau lebih.
{n} Cocokkan item sebelumnya dengan tepat n kali.
{n,} Cocokkan item sebelumnya setidaknya n kali.
{,m} Cocokkan item sebelumnya paling banyak m kali.
{n,m} Cocokkan item sebelumnya dari n ke m kali.

* (tanda bintang) cocok dengan item sebelumnya nol kali atau lebih. Berikut ini akan cocok dengan "benar", "benar" "ssright" dan seterusnya:

grep 's*right'

Di bawah ini adalah pola lanjutan yang cocok dengan semua baris yang dimulai dengan huruf kapital dan diakhiri dengan titik atau koma. .* regex cocok dengan sejumlah karakter apa pun:

grep -E '^[A-Z].*[.,]$' file.txt

? (tanda tanya) membuat item sebelumnya opsional dan hanya dapat dicocokkan satu kali. Berikut ini akan cocok dengan "cerah" dan "benar". ? karakter diloloskan dengan garis miring terbalik karena kami menggunakan ekspresi reguler dasar:

grep 'b\?right' file.txt

Berikut adalah regex yang sama menggunakan ekspresi reguler yang diperluas:

grep -E 'b?right' file.txt

+ (plus) karakter cocok dengan item sebelumnya satu kali atau lebih. Berikut ini akan cocok dengan "benar" dan "benar", tetapi tidak "benar":

grep -E 's+right' file.txt

Karakter kurung kurawal {} memungkinkan Anda menentukan jumlah pasti, batas atas atau bawah, atau rentang kejadian yang harus terjadi agar kecocokan dapat terjadi.

Berikut ini cocok dengan semua bilangan bulat yang memiliki antara 3 dan 9 digit:

grep -E '[[:digit:]]{3,9}' file.txt

Alternation #

Istilah pergantian adalah sederhana "ATAU". Operator pengganti | (pipe) memungkinkan Anda untuk menentukan kemungkinan kecocokan yang berbeda yang dapat berupa string literal atau kumpulan ekspresi. Operator ini memiliki prioritas terendah dari semua operator ekspresi reguler.

Pada contoh di bawah, kami mencari semua kemunculan kata fatal , error , dan critical dalam file kesalahan log Nginx:

grep 'fatal\|error\|critical' /var/log/nginx/error.log

Jika Anda menggunakan ekspresi reguler yang diperluas, maka operator | tidak boleh diloloskan, seperti yang ditunjukkan di bawah ini:

grep -E 'fatal|error|critical' /var/log/nginx/error.log

Pengelompokan #

Pengelompokan adalah fitur dari ekspresi reguler yang memungkinkan Anda untuk mengelompokkan pola dan mereferensikannya sebagai satu item. Grup dibuat menggunakan tanda kurung () .

Saat menggunakan ekspresi reguler dasar, tanda kurung harus diloloskan dengan garis miring terbalik (\ ).

Contoh berikut cocok dengan "tanpa rasa takut" dan "kurang". ? quantifier membuat (fear) grup opsional:

grep -E '(fear)?less' file.txt

Ekspresi Backslash Khusus #

GNU grep mencakup beberapa meta-karakter yang terdiri dari garis miring terbalik diikuti oleh karakter biasa. Tabel berikut menunjukkan beberapa ekspresi garis miring terbalik khusus yang paling umum:

Ekspresi Deskripsi
\b Mencocokkan batas kata.
\< Mencocokkan string kosong di awal kata.
\> Mencocokkan string kosong di akhir kata.
\w Mencocokkan kata.
\s Mencocokkan spasi.

Pola berikut akan cocok dengan kata-kata terpisah "abjek" dan "objek". Itu tidak akan cocok dengan kata-kata jika disematkan dalam kata-kata yang lebih besar:

grep '\b[ao]bject\b' file.txt

Kesimpulan #

Ekspresi reguler digunakan dalam editor teks, bahasa pemrograman, dan alat baris perintah seperti grep , sed , dan awk . Mengetahui cara membuat ekspresi reguler bisa sangat membantu saat mencari file teks, menulis skrip, atau memfilter keluaran perintah.

Jika Anda memiliki pertanyaan atau masukan, jangan ragu untuk memberikan komentar.


Linux
  1. Perlu Escape Karakter Regex Di Sed Untuk Diinterpretasikan Sebagai Karakter Regex?

  2. Bash:Ekspresi Reguler Dalam Substitusi?

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

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

  2. Regex (grep) untuk pencarian multi-baris diperlukan

  3. Mengapa `\d` tidak berfungsi dalam ekspresi reguler di sed?

  1. Memulai dengan ekspresi reguler:Sebuah contoh

  2. Memperkenalkan ekspresi reguler

  3. Ekspresi reguler:Menarik semuanya bersama-sama