Belajar dengan membaca secara berurutan

Ekspresi Reguler Dasar — Pola grep

Latih ekspresi reguler dasar grep — 5 simbol ^/$/./*/[], regex extended dengan -E, dan -o untuk mencetak hanya bagian yang cocok — dengan mengekstrak dari file teks.

Alat untuk menguji regex-mu

Kamu juga bisa mencoba pola-pola dalam artikel ini di Penguji Regex berbasis browser. Alat ini menunjukkan di mana polamu cocok dengan teks masukanmu, langsung saat itu juga.

Ekspresi Reguler Dasar — ^ $ . * []

Ekspresi reguler adalah cara untuk menggambarkan sebuah pola dalam teks. grep menafsirkan string yang kamu cari sebagai ekspresi reguler, sehingga kamu bisa menemukan baris berdasarkan kondisi seperti 'diawali karakter ini' atau 'satu karakter apa pun di sini', bukan hanya dengan string tetap. 5 simbol yang perlu kamu pelajari untuk ekspresi reguler dasar adalah ^, $, ., *, dan [].

^ dan $ adalah anchor untuk awal dan akhir sebuah baris. . cocok dengan satu karakter apa pun, dan * berarti nol atau lebih pengulangan dari karakter sebelumnya. [abc] cocok dengan satu karakter apa pun di dalam kurung, dan [a-z] cocok dengan satu karakter huruf kecil berdasarkan rentang. Gabungkan keduanya untuk pencarian yang fleksibel.

Simbol regex dasar dan artinya
^ct$c.tbaris yang diawali cbaris yang diakhiri tsatu karakter apa punantara c dan t
^ adalah awal baris, $ akhir baris, dan . satu karakter apa pun.
SimbolArtiContohArti contohnya
^Cocok dengan awal barisgrep '^c' fTemukan baris yang diawali c
$Cocok dengan akhir barisgrep 't$' fTemukan baris yang diakhiri t
.Cocok dengan satu karakter apa pungrep 'c.t' fSatu karakter apa pun antara c dan t (cat/cot)
*Nol atau lebih dari karakter sebelumnyagrep 'ab*c' fBerapa pun jumlah b antara a dan c (ac/abc)
[abc]Cocok dengan salah satu karaktergrep '[cb]at' fTemukan cat atau bat
[a-z]Satu karakter apa pun dalam rentanggrep '[a-z]at' fSatu huruf kecil + at (cat/bat)
\|Cocok salah satu (atau)grep 'cat\|dog' fBaris yang mengandung cat atau dog
echo -e 'cat\ncot\ndog' > words.txt   # buat bahan
grep '^c' words.txt                       # cat dan cot, yang diawali c
grep 't$' words.txt                       # cat dan cot, yang diakhiri t
grep 'c.t' words.txt                      # cat dan cot yang cocok c?t

① Buat file bahan 3 baris dengan echo -e 'cat\ncot\ndog' > words.txt.

② Berikan grep sebuah pola dengan anchor awal baris dan tampilkan hanya baris yang diawali c.

③ Lalu, dengan pola yang memakai anchor akhir baris, tampilkan baris yang diakhiri t.

④ Terakhir, dengan pola yang menempatkan simbol satu-karakter-apa-pun di tengah, tampilkan baris yang punya satu karakter antara c dan t. (Jalankan dengan benar dan penjelasan akan muncul.)

Linux console
0 / 4 selesai
Loading Linux Terminal...

Pengulangan dan Kelas Karakter — * dan []

* berarti nol atau lebih pengulangan dari karakter sebelumnya. ab*c cocok dengan baris yang punya nol atau lebih b, seperti ac, abc, dan abbc. [] cocok dengan satu karakter apa pun di dalam kurung, sehingga [cb]at menangkap baik cat maupun bat. Menulis rentang seperti [a-z] mewakili satu karakter huruf kecil.

echo -e 'ac\nabc\nabbc\naxc' > rep.txt   # buat bahan
grep 'ab*c' rep.txt                       # ac abc abbc, dengan nol atau lebih b
echo -e 'cat\nbat\nrat' > cls.txt      # buat bahan
grep '[cb]at' cls.txt                     # 2 baris cat dan bat

① Buat bahan untuk mengecek pengulangan dengan echo -e 'ac\nabc\nabbc\naxc' > rep.txt.

② Berikan grep sebuah pola yang memakai simbol untuk nol atau lebih pengulangan dari karakter sebelumnya, dan tampilkan baris yang boleh punya berapa pun jumlah b antara a dan c.

③ Buat bahan untuk mengecek kelas karakter dengan echo -e 'cat\nbat\nrat' > cls.txt.

④ Dengan pola yang memakai kelas karakter kurung, tampilkan hanya cat dan bat.

Linux console
0 / 4 selesai
Loading Linux Terminal...

Atau — Mencocokkan Salah Satu dengan \|

Dalam ekspresi reguler dasar, | (atau) diperlakukan sebagai karakter biasa apa adanya.

Untuk menyatakan alternasi, tambahkan backslash dan tulis \|, sehingga grep 'cat\|dog' cocok dengan baris yang mengandung cat atau dog.

Dengan grep -E, yang akan kamu pelajari nanti, kamu bisa menulis | langsung alih-alih \|.

echo -e 'cat\ndog\nfox' > sel.txt   # buat bahan
grep 'cat\|dog' sel.txt              # 2 baris yang mengandung cat atau dog

① Buat file bahan 3 baris dengan echo -e 'cat\ndog\nfox' > sel.txt.

② Untuk menyatakan 'atau' dalam ekspresi reguler dasar, tambahkan backslash pada |. Berikan grep pola 'cat\|dog' dan tampilkan baris yang mengandung cat atau dog.

③ Pastikan fox tidak dicetak karena tidak cocok dengan keduanya.

Linux console
0 / 2 selesai
Loading Linux Terminal...

Regex Extended dan Mencetak yang Cocok — grep -E / grep -o

Dalam ekspresi reguler dasar, + | ( ) perlu di-escape, seperti \+ \| \( \), tetapi dengan grep -E kamu bisa menulisnya langsung. grep -E mengaktifkan ekspresi reguler extended (ERE). Sekarang kamu bisa menulis + (satu atau lebih), | (atau), dan () (grup) langsung, yang sebelumnya perlu di-escape dalam regex dasar. grep -E 'cat|dog' cocok dengan baris yang mengandung cat atau dog.

grep -o mencetak hanya substring yang cocok, bukan seluruh baris yang cocok. Jika ada beberapa kecocokan dalam satu baris, ia mencetak masing-masing pada baris terpisah. Ini berguna saat kamu ingin menarik hanya bagian yang cocok dari sebuah log dan menghitungnya.

SimbolArtiContohArti contohnya
+Satu atau lebih dari sebelumnyagrep -E 'ab+c' fSatu atau lebih b antara a dan c (abc/abbc)
|Cocok salah satu (atau)grep -E 'cat|dog' fBaris yang mengandung cat atau dog
()Pengelompokangrep -E '(ab)+' fSatu atau lebih pengulangan ab (ab/abab)
Apa yang dilakukan grep -E dan grep -o
grep -E 'cat|dog' fbaris yang mengandungcat atau doggrep -o 'cat' fcetak hanya catyang cocok
-E mengaktifkan regex extended, dan -o mencetak hanya bagian yang cocok.
Cara menulisnyaArtiContoh
grep -EAktifkan regex extended (ERE)grep -E 'cat|dog' f
grep -oCetak hanya bagian yang cocokgrep -o 'cat' f

Regex yang lebih lanjut

grep -P (regex kompatibel-Perl) adalah ekstensi GNU grep. Dalam kursus ini kamu mempelajari ekspresi reguler dasar (^ $ . * []), grep -E untuk mengaktifkan regex extended, dan grep -o untuk mencetak hanya yang cocok. Semua ini bekerja dengan cara yang sama di Linux mana pun.

echo -e 'cat\ndog\nfox' > animals.txt   # buat bahan
grep -E 'cat|dog' animals.txt              # 2 baris cat atau dog
echo -e 'ac\nabc\nabbc' > plus.txt      # buat bahan
grep -E 'ab+c' plus.txt                    # abc abbc, dengan satu atau lebih b
echo -e 'cat cat dog' > line.txt         # buat bahan
grep -o cat line.txt                       # cetak setiap cat yang cocok pada barisnya sendiri

① Buat file bahan dengan echo -e 'cat\ndog\nfox' > animals.txt.

② Tambahkan opsi yang mengaktifkan regex extended ke grep dan tampilkan baris yang mengandung cat atau dog.

③ Buat bahan dengan echo -e 'ac\nabc\nabbc' > plus.txt, dan dengan regex extended grep -E 'ab+c', tampilkan baris dengan satu atau lebih b.

④ Buat bahan dengan beberapa kata dalam satu baris memakai echo -e 'cat cat dog' > line.txt.

⑤ Tambahkan opsi yang mencetak hanya yang cocok ke grep, cari cat, dan pastikan setiap kata yang cocok keluar pada barisnya sendiri.

Linux console
0 / 6 selesai
Loading Linux Terminal...

Memfilter Output Perintah — | grep

grep bisa mencari bukan hanya file yang diberikan sebagai argumen tetapi juga output perintah lain yang diteruskan lewat pipe |.

Salurkan hasil ls atau cat ke | grep untuk mempersempitnya hanya ke baris yang kamu butuhkan.

ls cmds | grep '^c' menampilkan hanya nama yang diawali c dari daftar direktori cmds, dan cat file | grep word memfilter isi file dengan cara yang sama.

Memfilter output perintah dengan | grep
ls cmdsseluruh daftarkeluarls cmds | grep '^c'persempit ke barisyang diawali c
Salurkan output perintah ke grep dengan | untuk mempersempitnya hanya ke baris yang cocok. cmds adalah direktori bahan kecil yang kamu buat sendiri.
mkdir -p cmds                                # direktori bahan kecil
touch cmds/cat cmds/cut cmds/sort            # siapkan 3 nama
ls cmds | grep '^c'                          # cat dan cut, yang diawali c
echo -e 'apple\nbanana\ncherry' > fruit.txt   # buat bahan
cat fruit.txt | grep an                      # hanya banana, yang mengandung an

① Siapkan direktori bahan kecil dengan mkdir -p cmds dan touch cmds/cat cmds/cut cmds/sort.

② Salurkan output ls cmds ke grep dengan | dan tampilkan hanya nama yang diawali c.

③ Buat bahan 3 baris dengan echo -e 'apple\nbanana\ncherry' > fruit.txt, lalu salurkan output cat fruit.txt ke | grep dan tampilkan hanya baris yang mengandung an.

Linux console
0 / 5 selesai
Loading Linux Terminal...
QUIZ

Cek Pemahaman

Jawab setiap pertanyaan satu per satu.

Soal 1Simbol mana yang cocok dengan awal baris dalam ekspresi reguler?

Soal 2Apa yang diwakili * dalam grep 'ab*c' f?

Soal 3Apa yang dicetak saat kamu menjalankan grep -o cat line.txt?