Berkas log, data, dan konfigurasi di Linux bisa berisi ribuan baris, dan hampir semua pekerjaan kita bermuara pada satu pertanyaan: baris mana yang memuat informasi yang sedang dicari? Perintah grep menjawabnya dengan menyaring baris-baris yang cocok dengan sebuah pola. Pada chapter ini kita akan memakai grep pada file data bertanda titik dua, mengenal opsi pencarian yang paling sering dipakai, mencari rekursif di seluruh folder, lalu menampilkan baris konteks di sekitar temuan. Fondasi pola yang dipakai grep adalah regular expression — di sini kita berfokus pada pola literal, lalu merujuk ke chapter khusus regex untuk pola lanjutan.
Mencari Pola Literal dalam File #
Perintah grep menerima dua argumen: pola yang dicari, lalu nama file tempat pencarian. Setiap baris yang memuat pola akan dicetak utuh ke stdout. Kita mulai dengan file data delapan baris berformat nama:kota:umur:
printf 'budi:jakarta:25\nsiti:bandung:31\nandi:surabaya:28\nrini:jakarta:22\njoko:medan:35\ndewi:bandung:29\nagus:jakarta:40\nsari:semarang:27\n' > data.txt
grep jakarta data.txt
grep -c jakarta data.txt
grep -n jakarta data.txtOutput yang Dihasilkan:
budi:jakarta:25
rini:jakarta:22
agus:jakarta:40
3
1:budi:jakarta:25
4:rini:jakarta:22
7:agus:jakarta:40Mari kita bedah baris per barisnya:
- Baris 1 (
printf ... > data.txt): membuat file fixture delapan baris; tiap blok pada chapter ini mandiri sehingga bisa diulang kapan pun. - Baris 2 (
grep jakarta data.txt): mencetak setiap baris yang memuat teksjakarta— tiga baris penghuni Jakarta lolos, lima lainnya disaring. - Baris 3 (
grep -c jakarta data.txt): tidak mencetak barisnya, hanya jumlahnya — jawaban3. - Baris 4 (
grep -n jakarta data.txt): menambahkan nomor baris asli di depan setiap temuan, sehingga kita tahu temuan berada di baris1,4, dan7.
Kombinasi -c dan -n adalah pasangan yang sering dipakai: -c untuk laporan jumlah, -n untuk melompat langsung ke lokasi baris.
Mengabaikan Huruf Besar dan Membalik Hasil #
Tiga opsi penyaring yang menempel erat pada grep sehari-hari: -i mengabaikan perbedaan huruf besar-kecil, -v membalik hasil (mencetak baris yang tidak cocok), dan -w membatasi cocok hanya bila pola berdiri sebagai kata utuh:
printf 'budi:jakarta:25\nsiti:bandung:31\nandi:surabaya:28\nrini:jakarta:22\njoko:medan:35\ndewi:bandung:29\nagus:jakarta:40\nsari:semarang:27\n' > data.txt
grep -i JAKARTA data.txt
grep -v jakarta data.txt
grep -w jaka data.txt
grep -w jakarta data.txtOutput yang Dihasilkan:
budi:jakarta:25
rini:jakarta:22
agus:jakarta:40
siti:bandung:31
andi:surabaya:28
joko:medan:35
dewi:bandung:29
sari:semarang:27
budi:jakarta:25
rini:jakarta:22
agus:jakarta:40Perintah grep -i JAKARTA tetap menemukan jakarta karena pencocokan jadi tidak peka huruf. Perintah grep -v jakarta mencetak lima baris pendatang dari kota lain — opsi ini sangat berguna untuk membuang baris berisik dari log. Bagian jaka dan jakarta memperlihatkan arti “kata utuh”: pola jaka adalah potongan kata di dalam jakarta, sehingga grep -w jaka tidak menemukan apa pun, sedangkan grep -w jakarta menemukan ketiga baris karena jakarta diapit tanda : dan akhir baris.
Mencari di Seluruh Folder dengan -r dan -l #
Untuk file yang jumlahnya banyak, opsi -r (rekursif) menyuruh grep menelusuri sebuah folder beserta seluruh isinya; setiap temuan didahului nama filenya. Opsi -l meringkas hasil menjadi daftar nama file yang memuat pola saja:
mkdir -p log-app
printf 'error: koneksi database gagal\ninfo: server dimulai\n' > log-app/server.log
printf 'info: job harian selesai\nwarning: disk hampir penuh\n' > log-app/job.log
grep -r error log-app
grep -r -l info log-app
ls log-app | grep serverOutput yang Dihasilkan:
log-app/server.log:error: koneksi database gagal
log-app/job.log
log-app/server.log
server.logMari kita bedah baris per barisnya:
- Baris 1-3: membuat folder
log-appberisi dua file log kecil sebagai bahan pencarian. - Baris 4 (
grep -r error log-app): menemukan satu baris dan mencetaknya dengan prefiks nama filelog-app/server.log:— format yang memudahkan penelusuran lanjutan. - Baris 5 (
grep -r -l info log-app): hanya mencetak nama file yang memuat polainfo; kedua file lolos karena keduanya punya barisinfo. - Baris 6 (
ls log-app | grep server): contohgrepdi ujung pipeline —lsmendaftar isi folder,grepmenyaringnya. Pola seperti ini dirangkai lebih jauh di chapter Pipes dan Redirection .
Menampilkan Konteks Sekitar dengan -A, -B, dan -C #
Terkadang baris yang cocok tidak berdiri sendiri: nilai di baris sebelum atau sesudahnya ikut menentukan artinya. Opsi -A n (after) menambah n baris setelah temuan, -B n (before) menambah n baris sebelum temuan, dan -C n (context) menambah keduanya:
printf 'budi:jakarta:25\nsiti:bandung:31\nandi:surabaya:28\nrini:jakarta:22\njoko:medan:35\ndewi:bandung:29\nagus:jakarta:40\nsari:semarang:27\n' > data.txt
grep -A1 budi data.txt
grep -B1 dewi data.txt
grep -C1 andi data.txtOutput yang Dihasilkan:
budi:jakarta:25
siti:bandung:31
joko:medan:35
dewi:bandung:29
siti:bandung:31
andi:surabaya:28
rini:jakarta:22Ketiga perintah sama-sama menampilkan temuan ditambah satu baris tetangga: grep -A1 budi memunculkan baris budi beserta baris siti di bawahnya, grep -B1 dewi memunculkan baris joko di atasnya, dan grep -C1 andi memunculkan siti dan rini di kedua sisinya. Bila dua kelompok konteks saling berjauhan, grep memisahkan mereka dengan garis --.
Pola Literal vs Regular Expression #
Pola yang kita pakai sejauh ini adalah literal — teks yang dicari harus muncul apa adanya. Secara bawaan grep sebenarnya menafsirkan pola sebagai basic regular expression, dan opsi -E mengaktifkan sintaks extended yang lebih ringkas. Contoh klasiknya pencarian “salah satu dari beberapa nama”:
grep -E '^(budi|siti)' data.txtPerintah tersebut mencocokkan baris yang diawali budi ATAU siti — tanda ^ menuntut posisi di awal baris dan (...|...) memberi pilihan. Alphabet regex lengkap (^, $, ., *, [...], dan kawan-kawannya) butuh ruang tersendiri, jadi kita bahas tuntas di chapter Regular Expressions
. Untuk pemakaian harian, pola literal plus -i, -v, dan -w sudah menutup sebagian besar kebutuhan penyaringan.
Dengan grep, kita bisa menemukan baris yang dicari. Tahap berikutnya adalah mengubah isi baris itu — mengganti teks, menghapus baris, menyunting file langsung — pekerjaan yang dikerjakan editor aliran sed, materi chapter berikutnya. Daftar opsi lengkapnya tersedia di halaman manual grep(1)
.