Menemukan baris tertentu di dalam berkas teks yang panjang adalah pekerjaan yang paling sering muncul di terminal, mulai dari mencari error di dalam log hingga memilih baris data tertentu. Topik ini membahas grep, yaitu perintah yang mencetak setiap baris masukan yang memuat pola yang diberikan. Pembahasan bergerak dari pencarian pola sederhana, dilanjutkan dengan flag yang mengatur bentuk keluaran, flag konteks untuk melihat sekitar baris yang cocok, dan diakhiri ekspresi reguler (regex), yaitu pola yang memakai karakter khusus untuk mewakili banyak teks sekaligus.
Berkas contoh dan pencarian pola#
Seluruh contoh pada topik ini memakai satu berkas log, yaitu catatan kejadian yang tumbuh seiring waktu, berisi pencatatan suhu tiga ruangan. Setiap barisnya memuat waktu pencatatan, nama ruangan, nilai suhu, dan statusnya. Berkas itu dibuat dengan perintah berikut.
# membuat berkas log sensor suhu
printf '2026-11-06 08:00 ruang-101 27.8 normal\n2026-11-06 08:00 ruang-102 31.5 panas\n2026-11-06 08:05 ruang-101 28.2 normal\n2026-11-06 08:05 ruang-102 32.0 panas\n2026-11-06 08:10 ruang-103 26.9 normal\n2026-11-06 08:15 ruang-101 29.4 normal\n2026-11-06 08:15 ruang-102 33.1 panas\n' > sensor-suhu.txt
cat sensor-suhu.txt2026-11-06 08:00 ruang-101 27.8 normal
2026-11-06 08:00 ruang-102 31.5 panas
2026-11-06 08:05 ruang-101 28.2 normal
2026-11-06 08:05 ruang-102 32.0 panas
2026-11-06 08:10 ruang-103 26.9 normal
2026-11-06 08:15 ruang-101 29.4 normal
2026-11-06 08:15 ruang-102 33.1 panasBentuk dasar grep adalah grep pola berkas. Perintah itu membaca setiap baris, menguji baris terhadap pola, dan mencetak baris yang memuat pola tersebut. Pola sebaiknya selalu diapit tanda kutip agar dibaca sebagai satu argumen utuh, kebiasaan yang berkaitan dengan quoting, yaitu pengapitan teks dengan tanda kutip agar shell tidak menguraikan isi pola.
# menampilkan baris yang memuat ruang-101
grep 'ruang-101' sensor-suhu.txt2026-11-06 08:00 ruang-101 27.8 normal
2026-11-06 08:05 ruang-101 28.2 normal
2026-11-06 08:15 ruang-101 29.4 normalTiga baris ruang-101 tampil apa adanya. Apabila tidak ada satu baris pun yang cocok, grep tidak mencetak apa pun. Perlu dicatat juga bahwa pencarian grep menelaah bagian mana pun dari baris, sehingga pola ruang-1 akan cocok dengan ruang-101, ruang-102, dan ruang-103 sekaligus.
Flag keluaran yang sering digunakan#
Perilaku grep diatur dengan flag, yaitu opsi berawalan tanda hubung yang ditulis sebelum pola. Empat flag yang paling sering dipakai adalah -n untuk menampilkan nomor baris, -c untuk menghitung baris yang cocok, -v untuk membalik pencarian, dan -i untuk membuat pencarian tidak peka huruf besar-kecil.
# -n menampilkan nomor baris pada setiap baris yang cocok
grep -n 'panas' sensor-suhu.txt2:2026-11-06 08:00 ruang-102 31.5 panas
4:2026-11-06 08:05 ruang-102 32.0 panas
7:2026-11-06 08:15 ruang-102 33.1 panasNomor baris di depan hasil menyatakan posisi baris tersebut di dalam berkas asli, sehingga lokasi kejadian mudah dilacak kembali. Flag ini menjadi lebih berguna pada berkas log yang tumbuh panjang, karena posisi kejadian tidak lagi diketahui secara pasti. Keluaran bernomor juga nyaman dipangkas kembali dengan head atau tail apabila kecocokannya banyak.
# -c menghitung baris yang cocok tanpa menampilkannya
grep -c 'ruang-102' sensor-suhu.txt
# -v membalik pencarian, yaitu menampilkan baris yang tidak memuat pola
grep -v 'normal' sensor-suhu.txt3
2026-11-06 08:00 ruang-102 31.5 panas
2026-11-06 08:05 ruang-102 32.0 panas
2026-11-06 08:15 ruang-102 33.1 panasFlag -c mencetak satu angka berupa banyaknya baris yang cocok, sedangkan -v menghasilkan kebalikan dari pencarian biasa, yaitu tiga baris berstatus panas. Flag terakhir diuji dengan pola yang ditulis dalam huruf kapital.
# -i membuat pencarian tidak peka huruf besar-kecil
grep -i 'RUANG-103' sensor-suhu.txt2026-11-06 08:10 ruang-103 26.9 normalSatu perubahan bentuk keluaran lain perlu diingat. Apabila pencarian menyentuh lebih dari satu berkas, grep mengawali setiap baris keluaran dengan nama berkas tempat baris itu ditemukan. Awalan ini menjaga asal setiap baris tetap terlihat, tetapi juga berarti baris keluaran tidak lagi persis sama dengan baris aslinya.
Flag konteks: baris sebelum dan sesudah#
Membaca baris yang cocok saja sering tidak cukup, karena kejadian di dalam log biasanya berdampingan dengan kejadian lain. Flag -A menampilkan beberapa baris setelah setiap baris yang cocok, flag -B menampilkan beberapa baris sebelumnya, sedangkan flag -C menampilkan keduanya. Angka di belakangnya menyatakan banyaknya baris, sehingga -C1 berarti satu baris sebelum dan satu baris sesudah.
# -C1 menampilkan satu baris sebelum dan sesudah baris yang cocok
grep -C1 'ruang-103' sensor-suhu.txt2026-11-06 08:05 ruang-102 32.0 panas
2026-11-06 08:10 ruang-103 26.9 normal
2026-11-06 08:15 ruang-101 29.4 normalKelompok baris yang saling bersebelahan digabungkan menjadi satu rangkaian, sedangkan kelompok yang terpisah dibatasi oleh baris berisi --. Contoh berikut mencari kata panas dengan satu baris setelahnya. Pemisah -- tampak karena rangkaian baris hasilnya tidak menyambung dari awal sampai akhir.
# -A1 menampilkan satu baris setelah setiap baris yang cocok
grep -A1 'panas' sensor-suhu.txt2026-11-06 08:00 ruang-102 31.5 panas
2026-11-06 08:05 ruang-101 28.2 normal
2026-11-06 08:05 ruang-102 32.0 panas
2026-11-06 08:10 ruang-103 26.9 normal
--
2026-11-06 08:15 ruang-102 33.1 panasEkspresi reguler dasar#
Pola pada contoh sejauh ini berupa teks yang dicari apa adanya. Ekspresi reguler memperluas pola dengan karakter khusus yang menyatakan posisi, kelas karakter, dan pengulangan, sehingga satu pola dapat mewakili banyak teks. Karakter khusus yang paling sering dipakai antara lain ^ yang menambatkan pola pada awal baris, $ yang menambatkan pada akhir baris, titik yang mencocokkan satu karakter apa pun, dan kelas karakter seperti [0-9] yang mencocokkan satu digit.
# acuan ^ menambatkan pola pada awal baris
grep '^2026-11-06 08:1' sensor-suhu.txt
# titik yang diloloskan mencocokkan titik sungguhan
grep '27\.' sensor-suhu.txt2026-11-06 08:10 ruang-103 26.9 normal
2026-11-06 08:15 ruang-101 29.4 normal
2026-11-06 08:15 ruang-102 33.1 panas
2026-11-06 08:00 ruang-101 27.8 normalKarakter khusus diperlakukan sebagai karakter biasa dengan escape, yaitu mengawalinya dengan garis miring terbalik. Pola 27\. hanya mencocokkan teks 27. sungguhan, sedangkan pola 27. tanpa lolos akan mencocokkan 27x8 seandainya baris itu ada. Untuk pola yang membutuhkan kelas karakter dan pengulangan, flag -E mengaktifkan bentuk ekspresi reguler yang lebih lengkap.
# kelas karakter dan rentang digit untuk suhu tiga puluhan
grep -E ' 3[0-9]\.[0-9]' sensor-suhu.txt2026-11-06 08:00 ruang-102 31.5 panas
2026-11-06 08:05 ruang-102 32.0 panas
2026-11-06 08:15 ruang-102 33.1 panasPola terakhir mencocokkan spasi, digit tiga, satu digit apa pun, titik sungguhan, lalu satu digit lagi, dan kebetulan bersesuaian dengan seluruh baris berstatus panas. Cakupan ekspresi reguler jauh lebih luas daripada contoh di atas. Topik ini membatasi pembahasannya pada karakter khusus yang paling sering dipakai sehari-hari, sedangkan penguasaan penuh sintaksnya, termasuk ekspresi reguler kompatibel Perl, berada di luar lingkup jalur ini.
Kesalahan umum#
Pola yang memuat spasi tidak diapit kutip. Spasi memecah argumen, sehingga kata kedua dianggap nama berkas.
# tanpa kutip, kata kedua dianggap nama berkas kedua
grep 08:00 ruang-101 sensor-suhu.txtgrep: ruang-101: No such file or directory
sensor-suhu.txt:2026-11-06 08:00 ruang-101 27.8 normal
sensor-suhu.txt:2026-11-06 08:00 ruang-102 31.5 panasBaris pertama keluaran di atas menunjukkan grep mencari berkas bernama ruang-101, sedangkan baris berikutnya menunjukkan pencarian tetap berjalan pada sensor-suhu.txt. Perbaikannya adalah mengapit pola dengan kutip, misalnya grep '08:00 ruang-101' sensor-suhu.txt.
Titik tidak diloloskan. Titik mencocokkan satu karakter apa pun, sehingga pola 27.8 juga akan cocok dengan 27a8 seandainya baris itu ada. Gunakan 27\. untuk titik sungguhan, atau flag -F apabila pola benar-benar ingin dibaca sebagai teks biasa tanpa makna ekspresi reguler.
Pencarian cocok di tengah kata lain. Pola ruang-1 cocok dengan ruang-101 karena pencarian grep menelaah potongan mana pun baris. Flag -w membatasi kecocokan pada kata utuh, sehingga grep -w 'ruang-101' tidak akan cocok dengan ruang-1010 bila baris semacam itu ada.
Ringkasan#
grepmencetak setiap baris masukan yang memuat pola yang diberikan, dan tidak mencetak apa pun bila tidak ada kecocokan.- Flag
-n,-c,-v, dan-imengatur nomor baris, hitungan, pembalikan, dan kepekaan huruf besar-kecil. - Flag
-A,-B, dan-Cmenampilkan baris sebelum, sesudah, atau di kedua sisi setiap kecocokan, dengan pemisah--antarkelompok yang terpisah. - Ekspresi reguler memperluas pola dengan acuan seperti
^,$, titik, dan kelas karakter, sedangkan flag-Emengaktifkan bentuk lanjutannya.
Referensi#
- GNU Grep Manual — Free Software Foundation
— Dokumentasi resmi flag
grep, flag konteks, dan sintaks pola beserta perbedaan BRE dan ERE.