Ekspresi reguler digunakan untuk mencari dan memanipulasi teks, berdasarkan pola. Sebagian besar perintah dan bahasa pemrograman Linux menggunakan ekspresi reguler.
Perintah grep digunakan untuk mencari string tertentu dalam sebuah file. Silakan lihat artikel kami sebelumnya untuk 15 contoh perintah grep praktis.
Anda juga dapat menggunakan ekspresi reguler dengan perintah grep ketika Anda ingin mencari teks yang berisi pola tertentu. Ekspresi reguler mencari pola pada setiap baris file. Ini menyederhanakan operasi pencarian kami.
Artikel ini adalah bagian dari 2 seri artikel.
Artikel bagian 1 ini mencakup contoh grep untuk ekspresi reguler sederhana. Artikel bagian 2 mendatang akan membahas contoh ekspresi reguler lanjutan di grep.
Mari kita ambil file /var/log/messages file yang akan digunakan dalam contoh kita.
Contoh 1. Awal baris ( ^ )
Dalam perintah grep, Simbol tanda sisipan ^ cocok dengan ekspresi di awal baris. Dalam contoh berikut, ini menampilkan semua baris yang dimulai dengan 10 November. Yaitu Semua pesan yang dicatat pada 10 November.
$ grep "^Nov 10" messages.1 Nov 10 01:12:55 gs123 ntpd[2241]: time reset +0.177479 s Nov 10 01:17:17 gs123 ntpd[2241]: synchronized to LOCAL(0), stratum 10 Nov 10 01:18:49 gs123 ntpd[2241]: synchronized to 15.1.13.13, stratum 3 Nov 10 13:21:26 gs123 ntpd[2241]: time reset +0.146664 s Nov 10 13:25:46 gs123 ntpd[2241]: synchronized to LOCAL(0), stratum 10 Nov 10 13:26:27 gs123 ntpd[2241]: synchronized to 15.1.13.13, stratum 3
^ cocok dengan ekspresi di awal baris, hanya jika itu adalah karakter pertama dalam ekspresi reguler. ^N cocok dengan baris yang dimulai dengan N.
Contoh 2. Akhir baris ($)
Karakter $ cocok dengan ekspresi di akhir baris. Perintah berikut akan membantu Anda mendapatkan semua baris yang diakhiri dengan kata “terminating”.
$ grep "terminating.$" messages Jul 12 17:01:09 cloneme kernel: Kernel log daemon terminating. Oct 28 06:29:54 cloneme kernel: Kernel log daemon terminating.
Dari output di atas, Anda dapat mengetahui kapan semua log kernel telah dihentikan. Sama seperti ^ cocok dengan awal baris hanya jika itu adalah karakter pertama, $ cocok dengan akhir baris hanya jika itu adalah karakter terakhir dalam ekspresi reguler.
Contoh 3. Hitungan baris kosong ( ^$ )
Menggunakan ^ dan $ karakter Anda dapat mengetahui baris kosong yang tersedia dalam file. “^$” menentukan baris kosong.
$ grep -c "^$" messages anaconda.log messages:0 anaconda.log:3
Perintah di atas menampilkan jumlah baris kosong yang tersedia di pesan dan file anaconda.log.
Contoh 4. Karakter Tunggal (.)
Meta-karakter khusus "." (titik) cocok dengan karakter apa pun kecuali akhir karakter baris. Mari kita ambil file input yang isinya sebagai berikut.
$ cat input 1. first line 2. hi hello 3. hi zello how are you 4. cello 5. aello 6. eello 7. last line
Sekarang mari kita cari kata yang memiliki karakter tunggal diikuti oleh ello. yaitu halo, cello dll.,
$ grep ".ello" input 2. hi hello 3. hi zello how are you 4. cello 5. aello 6. eello
Jika Anda ingin mencari kata yang hanya memiliki 4 karakter, Anda dapat memberikan grep -w “….” di mana titik tunggal mewakili setiap karakter tunggal.
Contoh 5. Kemunculan nol atau lebih (*)
Karakter khusus “*” cocok dengan nol atau lebih kemunculan karakter sebelumnya. Misalnya, pola '1*' cocok dengan nol atau lebih '1'.
Contoh berikut mencari pola “kernel:*” yaitu kernel:dan nol atau lebih kemunculan karakter spasi.
$ grep "kernel: *." * messages.4:Jul 12 17:01:02 cloneme kernel: ACPI: PCI interrupt for device 0000:00:11.0 disabled messages.4:Oct 28 06:29:49 cloneme kernel: ACPI: PM-Timer IO Port: 0x1008 messages.4:Oct 28 06:31:06 btovm871 kernel: sda: sda1 sda2 sda3 messages.4:Oct 28 06:31:06 btovm871 kernel: sd 0:0:0:0: Attached scsi disk sda . .
Dalam contoh di atas cocok untuk simbol kernel dan titik dua diikuti oleh sejumlah spasi/tanpa spasi dan "." cocok dengan karakter tunggal mana pun.
Contoh 6. Satu atau lebih kemunculan (\+)
Karakter khusus “\+” cocok dengan satu atau lebih kemunculan karakter sebelumnya. ” \+” cocok dengan setidaknya satu karakter spasi atau lebih.
Jika tidak ada ruang maka tidak akan cocok. Karakter "+" berada di bawah ekspresi reguler yang diperluas. Jadi Anda harus melarikan diri saat ingin menggunakannya dengan perintah grep.
$ cat input hi hello hi hello how are you hihello $ grep "hi \+hello" input hi hello hi hello how are you
Dalam contoh di atas, pola grep cocok dengan pola 'hai', diikuti oleh satu atau lebih karakter spasi, diikuti dengan "halo".
Jika tidak ada spasi antara hi dan hello, itu tidak akan cocok. Namun, karakter * cocok dengan nol atau lebih kemunculan.
“hihello” akan dicocokkan dengan * seperti yang ditunjukkan di bawah ini.
$ grep "hi *hello" input hi hello hi hello how are you hihello $
Contoh 7. Nol atau satu kejadian (\?)
Karakter khusus "?" cocok dengan nol atau satu kemunculan karakter sebelumnya. “0?” cocok dengan nol tunggal atau tidak sama sekali.
$ grep "hi \?hello" input hi hello hihello
“hi \?hello” cocok dengan hi dan hello dengan spasi tunggal (hi hello) dan tanpa spasi (hihello).
Baris yang memiliki lebih dari satu spasi antara hi dan hello tidak cocok dengan perintah di atas.
Contoh 8.Menghilangkan karakter khusus (\)
Jika Anda ingin mencari karakter khusus (misalnya:* , titik) dalam konten, Anda harus keluar dari karakter khusus dalam ekspresi reguler.
$ grep "127\.0\.0\.1" /var/log/messages.4 Oct 28 06:31:10 btovm871 ntpd[2241]: Listening on interface lo, 127.0.0.1#123 Enabled
Contoh 9. Kelas Karakter ([0-9])
Kelas karakter tidak lain adalah daftar karakter yang disebutkan dalam tanda kurung siku yang digunakan untuk mencocokkan hanya satu dari beberapa karakter.
$ grep -B 1 "[0123456789]\+ times" /var/log/messages.4 Oct 28 06:38:35 btovm871 init: open(/dev/pts/0): No such file or directory Oct 28 06:38:35 btovm871 last message repeated 2 times Oct 28 06:38:38 btovm871 pcscd: winscard.c:304:SCardConnect() Reader E-Gate 0 0 Not Found Oct 28 06:38:38 btovm871 last message repeated 3 times
Pesan berulang akan dicatat dalam file log pesan sebagai "pesan terakhir diulang n kali". Contoh di atas mencari baris yang memiliki angka (0to9) diikuti oleh kata "kali". Jika cocok, ini akan menampilkan garis sebelum garis yang cocok dan juga garis yang cocok.
Dengan tanda kurung siku, menggunakan tanda hubung Anda dapat menentukan rentang karakter. Seperti [0123456789] dapat diwakili oleh [0-9]. Rentang abjad juga dapat ditentukan seperti [a-z],[A-Z] dll. Jadi perintah di atas juga dapat ditulis sebagai
$ grep -B 1 "[0-9]\+ times" /var/log/messages.4
Contoh 10. Pengecualian pada kelas karakter
Jika Anda ingin mencari semua karakter kecuali yang ada di dalam kurung siku, gunakan simbol ^ (Caret) sebagai karakter pertama setelah kurung siku terbuka. Contoh berikut mencari baris yang tidak dimulai dengan huruf vokal dari file kata kamus di linux.
$ grep -i "^[^aeiou]" /usr/share/dict/linux.words 1080 10-point 10th 11-point 12-point 16-point 18-point 1st 2
Simbol tanda sisipan pertama dalam ekspresi reguler mewakili awal baris. Namun, simbol tanda sisipan di dalam tanda kurung siku mewakili "kecuali" — yaitu cocok kecuali semua yang ada di dalam tanda kurung siku.