Text Processing: awk & sed
Dua tool klasik Unix ini adalah senjata ampuh untuk memproses teks di terminal — tanpa perlu membuka editor.
sed — Stream Editor
sed mengubah teks baris per baris menggunakan ekspresi reguler:
# Sintaks dasar
sed 's/CARI/GANTI/' file.txt # ganti pertama per baris
sed 's/CARI/GANTI/g' file.txt # ganti semua (global)
sed 's/CARI/GANTI/gi' file.txt # case-insensitive
# Contoh nyata
sed 's/localhost/production.com/g' config.txt
sed 's/v1/v2/g' api-docs.md
# Hapus baris yang mengandung pattern
sed '/ERROR/d' log.txt
# Tampilkan baris tertentu
sed -n '5,10p' file.txt # baris 5 sampai 10
sed -n '/START/,/END/p' file.txt
# Edit file langsung (in-place)
sed -i 's/old/new/g' file.txt # Linux
sed -i '' 's/old/new/g' file.txt # macOS
# Tambah baris sebelum/sesudah pattern
sed '/pattern/i Baris sebelumnya' file.txt
sed '/pattern/a Baris sesudahnya' file.txt
awk — Text Processing Language
awk adalah bahasa pemrograman mini khusus untuk memproses teks berstruktur (kolom):
# awk memproses per baris, kolom dipisah whitespace
# $1=kolom1, $2=kolom2, dst. $0=seluruh baris
# Tampilkan kolom tertentu
awk '{print $1}' data.txt # kolom pertama saja
awk '{print $1, $3}' data.txt # kolom 1 dan 3
# Contoh: dari output ls -l, tampilkan nama file dan ukuran
ls -l | awk '{print $5, $9}'
# Filter baris berdasarkan kondisi
awk '$3 > 100' data.txt # baris di mana kolom 3 > 100
awk '/ERROR/ {print $0}' log.txt # baris yang mengandung ERROR
# Separator kustom
awk -F":" '{print $1}' /etc/passwd # separator ":"
awk -F"," '{print $2}' data.csv # separator "," (CSV)
# Kalkulasi
awk '{sum += $1} END {print "Total:", sum}' numbers.txt
# NR = nomor baris, NF = jumlah kolom
awk 'NR==1{print "Header:", $0}' file.txt
awk '{print NR": "$0}' file.txt # tambah nomor baris
Kombinasi sed & awk
# Pipeline klasik
cat access.log | grep "404" | awk '{print $7}' | sort | uniq -c | sort -rn
# Ekstrak IP dari log, hitung frekuensi
awk '{print $1}' access.log | sort | uniq -c | sort -rn | head -10
# Ubah format CSV menjadi TSV
sed 's/,/\t/g' data.csv
# Hapus baris kosong
sed '/^$/d' file.txt
awk 'NF' file.txt # cara awk
Contoh Kasus Nyata
# Ganti semua URL di file konfigurasi
sed -i 's|http://dev.local|https://prod.com|g' .env
# Ekstrak semua email dari file
grep -oE '[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}' contacts.txt
# Proses CSV: tampilkan nama (kolom 1) dengan nilai > 90 (kolom 3)
awk -F"," '$3 > 90 {print $1}' scores.csv
# Hitung total dari kolom angka
awk -F"," '{sum+=$2} END {print "Total:", sum}' sales.csv
Tips
- Selalu test dulu tanpa
-isebelum edit file langsung dengan sed awkuntuk kolom,seduntuk substitusi teksgrepuntuk filter,awkuntuk transformasi- Gunakan
man seddanman awkuntuk referensi lengkap