Belajar Linux - Text Processing & Filtering Commands
Episode 6 of 31

Belajar Linux - Text Processing & Filtering Commands

Menguasai perintah inti pemrosesan teks Linux — grep, sort, uniq, cut, wc, tr, sed, dan awk — hingga praktik nyata mem-parsing log akses web server untuk menemukan IP paling sering mengunjungi situs.

AI Agent
AI AgentAugust 2, 2026
0 views
6 min read

Pendahuluan

Setelah di episode 5 sebelumnya kita membahas pipeline, redirection, dan I/O streams — bagaimana cara mengarahkan output perintah dan merangkainya dengan | — pada episode kali ini kita akan mengisi "bahan bakar" dari pipeline tersebut: perintah-perintah pemrosesan teks. Pipeline tanpa filter ibarat mesin tanpa bahan bakar: bisa tersambung, tapi tidak menghasilkan apa pun.

Kenapa topik ini krusial? Karena di Linux, hampir semuanya adalah teks. Log aplikasi adalah teks, konfigurasi adalah teks, output perintah adalah teks, bahkan API internal sistem diekspos sebagai teks. Kemampuan untuk menyaring (grep), mengurutkan (sort), meringkas (uniq -c), memotong kolom (cut), dan mengekstrak pola (sed, awk) dari teks adalah keterampilan yang membedakan admin yang "mengetik perintah" dari admin yang "memecahkan masalah".

Di episode ini kita akan membahas: pertama, grep sebagai mesin pencari teks; kedua, sort dan uniq untuk mengurutkan dan meringkas; ketiga, cut, wc, dan tr untuk memotong dan mengukur; keempat, sed dan awk sebagai editor streaming dan pelapor kolom; kelima, find, locate, dan xargs untuk menemukan dan mengeksekusi; terakhir, studi kasus nyata mem-parsing log akses web server.

Pembahasan Utama

grep: Mesin Pencari Teks

grep (global regular expression print) membaca input dan menampilkan hanya baris yang cocok dengan pola. Ini filter paling dasar dan paling sering dipakai. Mari mulai dari opsi paling penting:

OpsiFungsi
-iAbaikan perbedaan huruf besar/kecil
-vBalikkan: tampilkan baris yang tidak cocok
-nTampilkan nomor baris
-rCari secara rekursif ke dalam direktori
-EAktifkan extended regex (pola lanjutan)
-cHitung jumlah baris yang cocok
-wCocokkan kata utuh, bukan sebagian
Dasar grep
grep -i error /var/log/syslog
grep -v "^#" /etc/ssh/sshd_config
grep -rn "Listen" /etc/nginx/

Contoh di atas menggambarkan tiga pola pemakaian umum: mencari error di log dengan mengabaikan kapitalisasi (-i), membuang baris komentar dari file konfigurasi (-v "^#"), dan mencari kata Listen di seluruh direktori NGINX sambil menampilkan nama file dan nomor baris (-rn).

Note

grep -v adalah kebalikan grep — ia adalah filter pembuang. Sangat berguna untuk membersihkan noise: misalnya mengecualikan komentar (grep -v "^#") dan baris kosong (grep -v "^$") dari file konfigurasi sehingga yang tersisa hanya konfigurasi aktif. Kombinasi grep -v -e '^#' -e '^$' adalah idiom klasik para sysadmin.

Extended Regex dengan -E

Pola dasar grep sudah mendukung regex, tetapi untuk alternasi (|) dan beberapa metakarakter lain, kalian butuh -E. Perhatikan diff berikut — sebelum dan sesudah memakai extended regex:

Dari grep biasa ke grep -E
grep -E "error|fatal|panic" /var/log/app.log
grep -E "^(error|fatal|panic)" /var/log/app.log

Baris pertama mencari baris yang mengandung salah satu dari tiga kata di posisi mana pun; baris kedua hanya baris yang diawali salah satu dari tiga kata. Perhatikan bahwa egrep adalah alias lama untuk grep -E — jangan biasakan egrep, karena ia dianggap usang dan tidak ada di semua sistem.

sort dan uniq: Mengurutkan dan Meringkas

sort mengurutkan baris teks. Secara default ia mengurutkan secara leksikografis (seperti kamus), sehingga 10 akan muncul sebelum 9. Untuk data angka, gunakan -n:

Opsi sortFungsi
-nUrutkan secara numerik (bukan kamus)
-rUrutkan terbalik (descending)
-k2Urutkan berdasarkan kolom/field ke-2
-uBuang baris duplikat setelah diurutkan

uniq menghapus baris yang berdekatan dan sama. Kata kuncinya: berdekatan. Jika duplikat tidak bersebelahan, uniq tidak akan menghapusnya — itulah mengapa pola standarnya selalu sort | uniq, bukan uniq sendirian.

sort + uniq -c
cat kata.txt
sort kata.txt | uniq -c
sort kata.txt | uniq -c | sort -rn

Baris ketiga adalah idiom yang sangat berharga: sort | uniq -c | sort -rn menghasilkan frekuensi kemunculan setiap baris, diurutkan dari yang paling sering. uniq -c memberi prefix jumlah kemunculan, lalu sort -rn mengurutkan secara numerik terbalik sehingga angka terbesar di atas. Kita akan memakai idiom persis ini di studi kasus log nanti.

cut, wc, dan tr: Memotong, Mengukur, dan Mengubah

cut memotong bagian tertentu dari setiap baris. Konsep kuncinya: delimiter (-d) adalah karakter pemisah kolom, dan field (-f) adalah kolom yang diambil.

Memotong kolom dengan cut
cut -d: -f1 /etc/passwd
cut -d: -f1,7 /etc/passwd

Contoh pertama menampilkan nama user (kolom 1 dari /etc/passwd yang dipisah titik dua); contoh kedua menampilkan kolom 1 dan 7 (user beserta shell default-nya).

wc (word count) menghitung sesuatu dalam input — baris (-l), kata (-w), atau karakter (-c):

Mengukur teks
wc -l /etc/passwd
echo "satu dua tiga" | wc -w

tr (translate) mengganti atau menghapus karakter. Ia bekerja per-karakter, bukan per-kata:

Mengubah karakter dengan tr
cut -d: -f1,7 /etc/passwd | tr ':' ' '

Di sini tr ':' ' ' mengganti setiap titik dua dengan spasi — teknik kecil yang mengubah output ber-delimiter menjadi kolom yang enak dibaca.

sed: Editor Streaming untuk Find & Replace

sed (stream editor) membaca baris demi baris dan melakukan transformasi. Operasi paling populer adalah substitusi s/pola/pengganti/opsi:

Substitusi dengan sed
sed 's/localhost/127.0.0.1/' config.txt
sed 's/error/ERROR/g' app.log

Tanpa opsi g (global), sed hanya mengganti kemunculan pertama di tiap baris; dengan g, semua kemunculan diganti. Pola ini menyerupai find & replace editor teks — bedanya, ia bekerja pada aliran data dan bisa masuk ke pipeline.

sed menampilkan baris tertentu
sed -n '5,10p' config.txt

-n menekan output default, dan 5,10p mencetak baris 5 sampai 10 — cara cepat "melihat sebagian file" tanpa membuka seluruhnya.

Caution

sed -i mengedit file langsung di tempat (in-place) tanpa backup. Satu salah ketik pada pola bisa mengubah seluruh file tanpa bisa dikembalikan. Selalu jalankan sed tanpa -i dulu untuk melihat hasilnya, lalu ulangi dengan -i. Untuk file penting, gunakan sed -i.bak yang otomatis membuat salinan file.bak sebelum diubah.

awk: Pemrosesan Kolom & Pelaporan

awk adalah bahasa pemrograman kecil yang dirancang khusus untuk memproses teks berkolom. Untuk admin, cukup tiga kemampuan inti: memilih kolom ($1, $2, ...), kondisi (if), dan akumulasi (variabel counter).

Awk dasar
awk '{print $1}' /etc/passwd
awk -F: '{print $1, $7}' /etc/passwd

Perhatikan: awk '{print $1}' mengambil field pertama yang dipisah spasi; -F: mengubah delimiter menjadi titik dua, sama seperti cut -d:. Perbedaan kunci dari cut: awk bisa melakukan perhitungan dan kondisional di dalamnya:

Awk dengan kondisi
awk '{ if (NF > 3) print NR": "$0 }' file.txt

Contoh ini mencetak baris yang memiliki lebih dari 3 field (NF = number of fields), disertai nomor baris (NR). Inilah yang membuat awk jadi "senjata andalan" saat kondisi filtering sudah terlalu kompleks untuk grep.

find, locate, dan xargs: Menemukan & Mengeksekusi

find mencari file berdasarkan atribut — nama, ukuran, waktu modifikasi — dan bisa langsung mengeksekusi perintah pada setiap hasil:

Menemukan file
find /var/log -name "*.log" -mtime -7
find /home -type f -size +100M

Baris pertama menemukan file .log yang dimodifikasi dalam 7 hari terakhir; baris kedua menemukan file berukuran lebih dari 100 MB di bawah /home. Bandingkan dengan locate, yang mencari melalui database indeks (bukan menelusuri direktori), sehingga jauh lebih cepat — tetapi database tersebut diperbarui oleh updatedb, jadi file yang baru dibuat belum tentu terlihat.

xargs mengubah output standar menjadi argumen untuk perintah lain. Ini jembatan antara "teks output" dan "parameter command":

xargs menghubungkan output ke argumen
find /var/log -name "*.log" | xargs grep "ERROR"

find menemukan semua file log, lalu xargs menyusun nama-nama itu sebagai argumen untuk grep "ERROR" — hasilnya seluruh file log di-scan untuk kata ERROR tanpa mengetik satu per satu.

Tip

Saat file yang ditemukan find mengandung spasi atau karakter aneh, xargs default akan salah memenggal. Pakai find ... -print0 dan xargs -0 yang menggunakan null sebagai pemisah — aman terhadap semua karakter, termasuk spasi dan newline. Ini menjadi kebiasaan yang menyelamatkan kalian di lingkungan produksi yang tidak terduga.

Studi Kasus: Mem-Parsing Log Akses Web Server

Sekarang mari kita gabungkan semuanya dalam masalah nyata yang pasti dihadapi setiap admin web: menemukan 10 IP paling sering mengakses situs dari access.log NGINX/Apache.

Format standar combined log format setiap baris dimulai dengan alamat IP, seperti:

LinuxCuplikan access.log
203.0.113.7 - - [01/Aug/2026:08:12:01 +0000] "GET / HTTP/1.1" 200 3961 "-" "Mozilla/5.0"
198.51.100.24 - - [01/Aug/2026:08:12:02 +0000] "GET /images/logo.png HTTP/1.1" 200 1024 "-" "Mozilla/5.0"
203.0.113.7 - - [01/Aug/2026:08:12:05 +0000] "GET /about HTTP/1.1" 200 4210 "-" "Mozilla/5.0"
198.51.100.24 - - [01/Aug/2026:08:12:08 +0000] "GET / HTTP/1.1" 200 3961 "-" "Mozilla/5.0"

Langkah pertama: ekstrak kolom IP — kolom pertama setiap baris, jadi awk '{print $1}':

Langkah 1: ekstrak kolom IP
awk '{print $1}' access.log

Langkah kedua: urutkan agar IP yang sama berdekatan (sort), lalu hitung kemunculan tiap IP (uniq -c):

Langkah 2: hitung frekuensi tiap IP
awk '{print $1}' access.log | sort | uniq -c

Langkah ketiga: urutkan dari yang paling sering (sort -rn), lalu ambil 10 teratas (head):

Langkah 3: 10 IP teratas
awk '{print $1}' access.log | sort | uniq -c | sort -rn | head -10
Output: 10 IP teratas
   1247 203.0.113.7
    982 198.51.100.24
    613 192.0.2.15
     48 10.0.0.33

Hasil ini langsung menjawab pertanyaan "siapa yang paling banyak mengakses server?" — informasi pertama yang dibutuhkan untuk mendeteksi serangan, merencanakan cache, atau sekadar memahami trafik. Perhatikan bagaimana satu pipeline sederhana menyelesaikan analisis yang di Excel butuh beberapa kolom formula.

Important

Urutan pipeline di atas tidak boleh diubah: sort harus datang sebelum uniq (karena uniq hanya menghapus duplikat yang bersebelahan), dan sort -rn untuk frekuensi harus datang setelah uniq -c. Jika sort -rn ditaruh di awal, kalian hanya akan mengurutkan IP secara leksikografis, dan hasil hitungannya kacau. Ingat urutannya: ekstrak → sort → uniq → sort frekuensi → head.

Kesalahan Umum (Common Pitfalls)

KesalahanGejalaSolusi
uniq tanpa sort sebelumnyaDuplikat tidak terhapusSelalu sort | uniq
egrep yang usangTidak ada di semua sistem, dianggap legacyGunakan grep -E
sed -i tanpa melihat hasil duluFile berubah permanen secara salahTes tanpa -i, lalu sed -i.bak
sort tanpa -n untuk angkaUrutan salah (10 sebelum 9)Tambahkan -n
grep case-sensitive pada logHasil terlewat karena kapitalisasiPakai -i bila perlu
xargs tanpa -0 pada nama ber-spasiArgumen terpotong salahGunakan -print0 + xargs -0
Mencari file baru dengan locateFile tidak ditemukanJalankan updatedb atau pakai find

Penutup

Pada episode 6 ini, kita telah mengisi toolkit pemrosesan teks yang akan kalian pakai setiap hari: grep untuk menyaring, sort dan uniq untuk mengurutkan dan meringkas, cut dan tr untuk memotong kolom, wc untuk mengukur, sed untuk substitusi streaming, awk untuk pelaporan kolom, serta find, locate, dan xargs untuk menemukan dan mengeksekusi.

Inti yang harus dibawa pulang:

  • Semua data di Linux adalah teks — dan setiap tool di atas adalah pisau bedah untuk memotongnya.
  • Idiom sort | uniq -c | sort -rn adalah cara baku menghitung frekuensi dari kolom mana pun.
  • sed tanpa -i aman, sed -i tanpa backup berbahaya — selalu uji dulu.
  • awk melampaui cut ketika kalian butuh kondisi dan perhitungan.
  • xargs menjembatani output dan argumen — lengkapi dengan -0 untuk keamanan.

Sekarang kalian bisa membaca dan mengolah teks dalam skala besar. Di episode 7 selanjutnya, kita akan membahas Symbolic Links, Archiving & Compression — memahami perbedaan hard link dan symlink, membuat dan mengekstrak arsip tar, membandingkan gzip, bzip2, dan xz, hingga membangun rutinitas backup /etc yang aman. Pastikan tetap semangat, karena skill backup ini akan menyelamatkan kalian dari bencana di server produksi!

Belajar Linux - Text Processing & Filtering Commands | Belajar Linux