📑 Daftar Isi
- Kenapa Bulk Edit Config Server Itu Menakutkan?
- Langkah 1: Backup Dulu, Jangan Nekat
- Langkah 2: Format Dasar sed yang Wajib Kamu Hafal
- Langkah 3: Trik Bulk Edit di Banyak File Sekaligus
- Menggabungkan sed dengan glob (*.conf)
- Bulk edit dengan find + sed (rekursif)
- Bulk edit di banyak server sekaligus (parallel SSH)
- Langkah 4: Pattern yang Sering Dipakai di Production
- Ganti kata dengan deskripsi
- Replace string dengan spasi ganda (whitespace)
- Komen dan buka komen garis tertentu
- Langkah 5: Delete, Insert, dan Operasi Lainnya
- Langkah 6: In-Place Editing yang Aman dan Uji Coba
- Langkah 7: Troublehooting & Command Table
- FAQ
Tolong ya, jangan buka file config pake sed langsung nebak-nebak command tanpa tau apa yang bakal terjadi. Aku udah lihat ini berkali-kali di production server — admin panik, string salah ketik, dan hasilnya seluruh service ikut down. Bener-bener, ini bukan hal yang sepele.
Jadi gini, aku dulu juga pernah ngalamin. Pas masih junior, aku disuruh ganti port SSH di 40 server VPS sekaligus. Bayangin, 40 file sshd_config, 40 restart, dan kalau salah satu ada typo, langsung ada 40 client yang nelpon komplain. Untungnya waktu itu pake sed, dan berkat itu, 10 menit langsung kelar. Tapi button nervous-e tetep ada, soale kita main-main sama config production.
Kenapa Bulk Edit Config Server Itu Menakutkan?
Sebelum aku kasih trik-nya, kita harus jujur dulu soal masalahnya. Masalahe dudu mung config-nya akeh wae. Dampak-e iso dadi bencana kalau salah — satu baris error di nginx.conf bisa bikin ratusan website error 502, atau typo di sshd_config bisa ngunci akses remote kamu sendiri. Common causes-e biasane: human error pas edit manual, config yang sama di banyak server tapi lupa sinkron, dan cuma satu orang yang tau file mana aja yang harus diubah.
Bayangin lagi ya, kalau kamu harus ngedit 30 file .conf yang isinya nyaris sama, terus cuma beda di beberapa parameter. Manual edit? Bisa dua jam. Dan dua jam itu berarti downtime, berarti client marah, berarti kamu ditegur. Nah, kabar baiknya, sed (stream editor) ini jalan-jalannya gampang banget. Kita cuma perlu mikir bentar soal pattern matching-nya, terus sisanya otomatis. Nih, perhatiin dulu konsep dasarnya sebelum kita gas ke langkah-langkah.
Sed itu bukan aplikasi ajaib yang bikin error hilang sendiri, tapi dia alat yang sangat presisi kalau kita paham caranya. Berbeda dengan vi atau nano yang kamu buka terus edit satu-satu, sed bisa langsung ngolah teks dari command line tanpa perlu buka file. Dia baca baris, cocokin pattern-nya, terus ubah, dan hasilnya bisa langsung ditulis balik ke file atau di-copy ke file baru. Ini kunci dari semua trik bulk edit yang bakal aku share di bawah.
Terus, satu hal yang sering disalahartikan: sed itu bukan cuma buat replace string. Dia bisa delete baris, insert baris baru, print baris tertentu, bahkan nambahin teks di awal atau akhir tiap baris. Jadi sebenarnya sed itu semacam alat serba bisa buat manipulasi teks, dan pas dipakai di banyak file sekaligus, dia jadi senjata utama buat NOC engineer yang kejar-kejaran sama waktu. Yaudah, langsung kita masuk ke bagian paling penting, yaitu backup dulu. Jangan dilewatin ya, ini tolong banget diperhatiin.
Langkah 1: Backup Dulu, Jangan Nekat
Ini non-negotiable. Sebelum sed menyentuh file apa pun di production, backup dulu. Aku gak peduli seberapa yakinnya kamu sama command-nya, salah satu baris aja bisa bikin masalah. Jadi backup-nya gini:
cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.bak.20260901
Kalau kamu ngedit banyak file dalam satu folder, backup semua sekaligus dengan loop:
mkdir -p /root/config-backup-20260901
for f in /etc/nginx/sites-available/*.conf; do
cp "$f" /root/config-backup-20260901/
done
Nah, trik yang lebih cerdas buat yang suka multiple files — biarkan sed bikin backup otomatis tiap file asli dengan flag -i dan suffix. Jadi sed bakal nyimpen versi lama dengan nama file.bak sebelum nulis versi baru:
sed -i.bak \'s/worker_processes 4;/worker_processes 8;/\' /etc/nginx/nginx.conf
Ini menghasilkan dua file: nginx.conf (yang udah diubah) dan nginx.conf.bak (versi asli). Kalau ada yang salah, kamu tinggal restore dalem sedetik. Percaya deh, backup ini yang ngebedain antara NOC yang tenang dan NOC yang lagi panik jam 3 pagi.
Dan satu lagi, sebelum backup, pastikan kamu tahu versi config-nya sekarang. Kadang ada server yang beda versi antar environment, jadi jangan asumsikan semua filenya identik. Cek dulu dengan grep atau diff antar server. Ini masuk akal kan? Karena config yang dipangkas di satu server belum tentu pangkal masalahnya sama di server lain.
Langkah 2: Format Dasar sed yang Wajib Kamu Hafal
Oke, sekarang inti dari semuanya. Format dasar sed itu begini:
sed [options] \'s/pola_lama/pola_baru/flags\' nama_file
Bagian s itu singkatan dari substitute (ganti). Trus pola lama dan pola baru dipisah sama slash /. Trus ada flags di ujungnya. Yang paling umum:
- g — ganti semua kemunculan di tiap baris (global), tanpa ini sed cuma ganti yang pertama di tiap baris
- i — case insensitive, jadi gak peduli huruf besar/kecil
- tanpa flag — cuma ganti kemunculan pertama di tiap baris
Contoh paling simpel. Misal kamu mau ganti semua port 80 jadi 8080 di file konfigurasi vhost:
sed \'s/80/8080/g\' /etc/nginx/sites-available/example.conf
Perhatiin: command di atas cuma nampilin hasilnya di terminal, belum nulis balik ke file. Itu lintasan uji coba — bagus banget buat mastiin pattern-nya bener sebelum kamu pake -i. Ini cara paling aman buat nguji.
Trus kalau kamu udah yakin, baru tulis ke file aslinya:
sed -i \'s/80/8080/g\' /etc/nginx/sites-available/example.conf
Perhatiin -i di sana. Itu yang bikin sed nulis hasilnya langsung ke file. Tanpa itu, dia cuma print di layar dan file asli tetep aman. Banyak admin pemula lupa ini, terus bingung kok filenya gak berubah. Gak usah bingung, intinya: gak ada -i berarti gak ada perubahan permanen.
Langkah 3: Trik Bulk Edit di Banyak File Sekaligus
Nah, ini dia bagian yang paling seru. Sekarang kita gabungin sed sama globbing shell biar bisa ngedit banyak file dalam satu command. Ini yang bikin 40 VPS tadi kelar dalem 10 menit.
Menggabungkan sed dengan glob (*.conf)
Kalau kamu mau ganti string yang sama di semua file .conf dalam satu folder:
sed -i \'s/max_connections = 100/max_connections = 200/g\' /etc/mysql/conf.d/*.cnf
Command ini ngubah semua file yang match pola *.cnf di folder conf.d-nya. Cekosong dulu dengan ls /etc/mysql/conf.d/*.cnf buat mastiin daftar file-nya bener, biar gak ngedit file yang gak kamu maksud.
Bulk edit dengan find + sed (rekursif)
Kalau config-nya tersebar di banyak subfolder, pakai find buat nemu file-nya dulu, terus serahin ke sed:
find /etc/nginx -name \"*.conf\" -exec sed -i \'s/worker_processes 4;/worker_processes 8;/g\' {} \;
Bedanya sama glob biasa: find ini bakal jalan rekursif ke semua subfolder di bawah /etc/nginx, jadi nemu semua file .conf di mana pun mereka berada. Ini wajib banget kalau struktur direktori kamu beda-beda antar server.
Bulk edit di banyak server sekaligus (parallel SSH)
Terus, level berikutnya: kalau file yang sama ada di banyak server, kombinasikan sed sama pssh atau parallel-ssh:
pssh -h servers.txt -i \"sed -i 's/listen 80/listen 8080/g' /etc/nginx/nginx.conf && systemctl reload nginx\"
Ini bakal ngedit config di semua server yang ada di list servers.txt, terus reload nginx-nya. Sekali jalan, 40 server beres. Tapi tolong, pake pssh -h servers.txt -i ini dengan sangat hati-hati, karena satu command salah langsung nyebar ke semua server. Selalu test di satu server dulu sebelum skala besar.
Langkah 4: Pattern yang Sering Dipakai di Production
Ini beberapa pattern sed yang sering banget aku pakai sehari-hari di production. Simpen baik-baik, karena ini nyata dan udah aku test berkali-kali.
Ganti kata dengan deskripsi
Ganti semua teks yang mengandung kata tertentu, tapi kamu gak tau persis isinya. Misal mau komen garis include tertentu:
sed -i \'s/^include php7/include php8/\' /etc/nginx/nginx.conf
Di sini ^ artinya awal baris. Jadi sed cuma ngubah baris yang dimulai dengan kata “include php7”. Itu mencegah kamu ngedit baris lain yang kebetulan berisi kata serupa di tengah-tengah.
Replace string dengan spasi ganda (whitespace)
Kadang config-nya punya spasi ganda atau tab yang gak konsisten. Rapihin semua spasi ganda jadi satu:
sed -i \'s/ */ /g\' /etc/php/8.3/fpm/pool.d/www.conf
Pola * artinya satu spasi diikuti nol atau lebih spasi. Jadi spasi ganda, triple, atau tab bisa disederhanain jadi satu spasi. Hati-hati, jangan dipake di file yang emang butuh indentation berarti, kayak config YAML. YAML peka sama spasi, jadi ini bakal ngerusak format-nya.
Komen dan buka komen garis tertentu
Kamu bisa dengan cepat ngomen (bikin jadi #) atau buka komen (hapus #) di baris tertentu. Ini aplikasi umum buat config MySQL, PHP, atau service lain yang suka nge-disable fungsi via komen:
# komen garis izin ssh root
sed -i \'s/^#PermitRootLogin/PermitRootLogin/\' /etc/ssh/sshd_config
# buka komen garis
sed -i \'s/^PermitRootLogin/#PermitRootLogin/\' /etc/ssh/sshd_config
Perhatiin polanya beda tipis. Buat komen, kamu nambahin # di awal (via s/^PermitRootLogin/#PermitRootLogin/). Buat buka komen, kamu hapus #-nya. Ini cara yang aman buat toggling setting tanpa ngerusak struktur file.
Langkah 5: Delete, Insert, dan Operasi Lainnya
Eh tapi, sed buat bulk edit itu bukan cuma soal replace doang. Kadang kamu perlu hapus baris atau sisipin baris baru. Ini dia-dia yang jarang diketahui banyak orang.
Hapus baris berdasarkan pola
# hapus semua baris yang mengandung 'fastcgi_pass'
sed -i \'/fastcgi_pass/d\' /etc/nginx/sites-available/api.example.com.conf
# hapus baris kosong
grep -v \'^$\' file.conf > file-barubah.conf
Eits, hati-hati sama yang hapus baris ini. Kalau kamu gak yakin, jangan langsung pake -i. Munculin dulu baris yang cocok tanpa ngedit, biar kamu lihat apa yang bakal kehapus:
sed \'/fastcgi_pass/d\' /etc/nginx/sites-available/api.example.com.conf | less
Andai hasilnya oke, baru eksekusi dengan -i. Jangan sombong, selalu cek dulu. Gitu ta? Ya.
Sisipin baris sebelum atau sesudah pola tertentu
# sisipin baris baru SEBELUM baris yang mengandung 'server_name'
sed -i \'/server_name/i\tlisten 8080;\' /etc/nginx/sites-available/example.com
# sisipin baris baru SESUDAH baris yang mengandung 'server_name'
sed -i \'/server_name/a\tlisten 8080;\' /etc/nginx/sites-available/example.com
i itu insert (sebelum), a itu append (sesudah). Ini keren banget kalau kamu nambahin directive baru di config secara massal, tanpa harus buka file satu-satu.
Langkah 6: In-Place Editing yang Aman dan Uji Coba
Yang paling aku tekankan di sini: selalu uji dulu tanpa -i sebelum beneran ngubah file production. Cara paling gampang, bikin file test dulu:
cp /etc/nginx/nginx.conf /tmp/nginx-test.conf
sed -i \'s/worker_processes 4;/worker_processes 8;/\' /tmp/nginx-test.conf
diff /etc/nginx/nginx.conf /tmp/nginx-test.conf
Dengan diff itu kamu bisa lihat persis apa yang berubah sebelum nyentuh file asli. Ini metode favoritku — cuma beda beberapa baris, dan kamu yakin 100% sebelum commit ke production. Setelah itu, baru pindahin hasilnya:
cp /tmp/nginx-test.conf /etc/nginx/nginx.conf
Dan selalu cek sintaks config sebelum reload service. Buat nginx:
nginx -t
Buat php-fpm:
php-fpm8.3 -t
Buat sshd:
sshd -t
Ini nangkep error antes. Kalau syntax error, jangan reload. Kasih tau Command tidak ditemukan atau syntax invalid, dan kamu mesti kembalikan file-nya. Percaya aku, ngecek syntax lebih murah daripada ngerestart service yang akhirnya malah down.
Langkah 7: Troublehooting & Command Table
Berikut tabel troubleshooting yang sering muncul pas pakai sed buat bulk edit config, biar kamu gak bingung nyari-nyari.
| Masalah | Penyebab | Solusi Cepat |
|---|---|---|
| File gak berubah / hasil tetap sama | Lupa pakai flag -i, atau pola nggak cocok | Ganti sed 's/.../' jadi sed -i 's/.../'. Cek pola dengan grep dulu. |
| Cuma baris pertama yang berubah | Lupa flag g (global) | Tambah g di akhir: sed -i 's/foo/bar/g' |
| Accidental replace semua kemunculan | Pola terlalu broad (misal cuma angka) | Bikin pola lebih spesifik, pakai anchor ^ dan $ |
| Sed ngubah file yang gak dimaksud | Glob (*.conf) match file lain | Jalankan ls *.conf dulu buat lihat daftar sebelum sed |
| Syntax error service setelah edit | Hilang satu karakter, atau spasi nggak konsisten | Check syntax (nginx -t), restore dari backup .bak |
| Pattern mengandung slash / gak kebaca | Slash dipakai sebagai delimiter | Ganti delimiter jadi | atau #: sed -i 's|/etc/foo|/etc/bar|' |
Nah, satu lagi yang sering luput. Kalau pola kamu mengandung karakter khusus kayak titik (.), tanda bintang (*), atau dollar ($), itu diinterpretasi sed sebagai regex. Jadi kalau mau cocokin teks literal yang ada titiknya, escape dulu titik-nya. Contohnya ganti example.com jadi example.net, titik-nya harus diescape:
sed -i \'s/example\.com/example.net/g\' /etc/hosts
Tanpa backslash sebelum titik, sed bakal nganggap titik itu “karakter apa pun” — dan itu bisa cocokin pattern yang gak kamu mau. Ini detail kecil tapi sering bikin admin bingung berjam-jam.
FAQ
Q: Apakah pakai sed -i bisa bikin file corrupt?
Ya, kalau polanya salah atau kamu ngedit file binary secara tidak sengaja. Makanya selalu test tanpa -i dulu, dan selalu backup file asli. Sed -i menimpa file asli, jadi kalau ada kesalahan, kamu kehilangan data asli kalau nggak backup.
Q: Bagaimana cara ngedit banyak file config di banyak server sekaligus?
Gunakan sed dikombinasikan dengan parallel SSH tools seperti pssh, parallel-ssh, atau ansible. Pilih satu tool yang kamu feel nyaman. Ansible itu lebih aman karena ada dry-run dan target yang eksplisit; pssh lebih simpel buat job cepat.
Q: Apakah sed bisa dipakai di file YAML atau JSON?
Bisa secara teknis, tapi hati-hati banget. File YAML dan JSON peka terhadap indentasi dan struktur. Satu kesalahan kecil bisa bikin parse error total. Untuk config yang complex kayak gitu, lebih aman pakai tool yang paham format-nya, misal jq buat JSON, atau edit manual dengan editor YAML.
Q: Apa bedanya sed -i dengan sed tanpa -i?
Sed tanpa -i hanya menampilkan hasil transformasi di terminal tanpa mengubah file asli. Sed -i menulis hasilnya langsung ke file asli. Jadi untuk uji coba, selalu pakai tanpa -i; untuk mengubah file permanen, baru pakai -i.
Jadi, intinya begini. Sed itu bukan cuma tool buat ganti-ganti teks, tapi kunci buat bulk edit config di banyak server dengan cepat dan relatif aman — selama kamu paham pattern matching-nya dan disiplin soal backup. Aku lakuin ini setiap hari di production, dan percayalah, waktu yang kamu hemat itu gak ternilai. Yuk langsung praktekin step di atas, mulai dari yang paling aman (test tanpa -i). Nek isih bingung, cek log-e dan bandingin sama output yang aku kasih. Gas terus!