Perintah sed: Mengganti String, Menghapus Baris, dan Memakai Opsi -i
Perintah sed adalah alat Linux yang membaca file baris demi baris dan menjalankan penggantian, penghapusan, serta penyisipan, sehingga Anda dapat mengubah nilai file konfigurasi tanpa membuka editor. Saat kami menjalankan sed pada salinan wp-config.php WordPress di server AlmaLinux 9, nama database dapat diubah sambil mempertahankan file asli dengan -i.bak.
Pesan error dalam artikel ini ditampilkan apa adanya seperti keluaran pada locale bahasa Inggris.
1️⃣ Cara pakai dasar perintah sed dan penggantian s
Perintah s yang paling sering dipakai mengganti string dengan format [s/string yang dicari/string pengganti/]. Hanya kecocokan pertama dalam satu baris yang diganti.
echo 'http://example.com http://example.com/blog' | sed 's/http:/https:/'https://example.com http://example.com/blogUntuk mengganti semua string dalam baris, tambahkan flag g di akhir.
echo 'http://example.com http://example.com/blog' | sed 's/http:/https:/g'https://example.com https://example.com/blogJika nama file ditambahkan di belakang, sed membaca file itu dan menampilkan hasil yang sudah diganti. Pada salinan wp-config-sample.php WordPress bernama wp-config.php, kami mengubah nilai DB_USER dan memeriksa baris itu saja dengan grep.
sed 's/username_here/wp_user/' wp-config.php | grep DB_USERdefine( 'DB_USER', 'wp_user' );Karena nilainya berubah di output, mudah mengira file juga berubah, tetapi tanpa opsi sed hanya menampilkan hasil di layar dan membiarkan file asli apa adanya. Saat baris yang sama dicari lagi di file, nilai awal masih ada.
grep DB_USER wp-config.phpdefine( 'DB_USER', 'username_here' );Untuk mengubah file aslinya juga, gunakan opsi -i pada 4️⃣.
2️⃣ Memilih baris sed dengan nomor baris dan pola (-n, p)
Tanpa alamat, perintah s berlaku untuk semua baris. Jadi untuk menangani baris tertentu, tulis nomor baris atau pola sebagai alamat di depan perintah. -n mematikan cetak otomatis dan p mencetak baris yang dipilih. Jika dipakai bersama, hanya baris 23 yang tampil.
sed -n '23p' wp-config.phpdefine( 'DB_NAME', 'database_name_here' );Jika dua nomor baris dihubungkan dengan koma, rentang itu akan tampil. Baris 23 sampai 32 adalah bagian yang berisi pengaturan nama database, pengguna, kata sandi, dan host.
sed -n '23,32p' wp-config.phpdefine( 'DB_NAME', 'database_name_here' );
/** Database username */
define( 'DB_USER', 'username_here' );
/** Database password */
define( 'DB_PASSWORD', 'password_here' );
/** Database hostname */
define( 'DB_HOST', 'localhost' );Jika pola ditulis di antara garis miring sebagai pengganti nomor baris, semua baris yang berisi pola itu akan dipilih.
sed -n '/DB_/p' wp-config.phpdefine( 'DB_NAME', 'database_name_here' );
define( 'DB_USER', 'username_here' );
define( 'DB_PASSWORD', 'password_here' );
define( 'DB_HOST', 'localhost' );
define( 'DB_CHARSET', 'utf8mb4' );
define( 'DB_COLLATE', '' );Perintah [=] mencetak nomor baris yang dipilih. Alamat $ berarti baris terakhir, jadi [$=] menunjukkan jumlah seluruh baris file.
sed -n '/DB_HOST/=' wp-config.php32sed -n '$=' wp-config.php102Alamat juga bisa ditaruh di depan perintah s. Di bawah ini hasil mengganti localhost hanya di baris 32 dan mencetak baris yang berubah saja dengan flag p.
sed -n '32s/localhost/127.0.0.1/p' wp-config.phpdefine( 'DB_HOST', '127.0.0.1' );Saat p dijalankan tanpa -n, baris yang dipilih muncul sekali lagi. sed membaca baris satu per satu ke pattern space, menjalankan perintah, lalu mencetak pattern space secara otomatis, sehingga baris 2 yang dicetak p muncul lagi lewat cetak otomatis.
sed '2p' wp-config.php | head -n 4<?php
/**
/**
* The base configuration for WordPressCara membaca dan memproses baris satu per satu ini seperti ban berjalan pabrik yang menaruh komponen satu per satu ke meja kerja, mengolahnya, lalu beralih ke komponen berikutnya.
Apa yang dicetak tiap perintah pada setiap baris dapat dibandingkan langkah demi langkah pada diagram di bawah.
3️⃣ Menghapus dan menyisipkan baris dengan perintah sed (d, i, a)
d menghapus baris yang dipilih. Untuk melihat contoh konfigurasi nginx di bawah tanpa baris komentar, pilih baris yang diawali # atau yang hanya berisi spasi sebelum # dengan pola [^ *#].
cat example.conf# example.com
server {
listen 80;
server_name example.com www.example.com;
# document root
root /var/www/example.com;
index index.php index.html;
location / {
try_files $uri $uri/ /index.php?$args;
}
}sed '/^ *#/d' example.confserver {
listen 80;
server_name example.com www.example.com;
root /var/www/example.com;
index index.php index.html;
location / {
try_files $uri $uri/ /index.php?$args;
}
}Jika perintah dihubungkan dengan titik koma, [^$] yang berarti baris kosong ikut dihapus. Dua baris kosong yang tersisa setelah komentar dihapus hilang, dan hanya baris konfigurasi yang tersisa.
sed '/^ *#/d; /^$/d' example.confserver {
listen 80;
server_name example.com www.example.com;
root /var/www/example.com;
index index.php index.html;
location / {
try_files $uri $uri/ /index.php?$args;
}
}i menyisipkan teks sebelum baris yang dipilih, dan a menyisipkannya sesudah baris itu. Hasil menyisipkan satu baris komentar sebelum baris 1 ada di bawah.
sed '1i # managed by sed' example.conf | head -n 3# managed by sed
# example.com
server {Mudah mengira teks berindentasi setelah a ikut membawa indentasinya, tetapi GNU sed melewati spasi tepat setelah a dan hanya menyisipkan teksnya.
sed '/index index.php/a client_max_body_size 64M;' example.conf# example.com
server {
listen 80;
server_name example.com www.example.com;
# document root
root /var/www/example.com;
index index.php index.html;
client_max_body_size 64M;
location / {
try_files $uri $uri/ /index.php?$args;
}
}Untuk mempertahankan indentasi, tambahkan garis miring terbalik setelah a. Semua mulai dari spasi setelah garis miring terbalik masuk sebagai teks.
sed '/index index.php/a\ client_max_body_size 64M;' example.conf# example.com
server {
listen 80;
server_name example.com www.example.com;
# document root
root /var/www/example.com;
index index.php index.html;
client_max_body_size 64M;
location / {
try_files $uri $uri/ /index.php?$args;
}
}c mengganti seluruh baris yang dipilih. Di bawah ini empat baris pertama hasil mengubah baris listen 80 menjadi 8080.
sed '/listen 80;/c\ listen 8080;' example.conf | head -n 4# example.com
server {
listen 8080;
server_name example.com www.example.com;4️⃣ Mengubah file langsung dengan sed -i dan nama file cadangan
-i menyimpan hasil ke file asli, bukan ke layar. Teks yang ditempel tepat setelah -i ditambahkan ke akhir nama file cadangan. wp-config.php dan file lain yang dibaca situs sebaiknya diubah dengan -i.bak agar file aslinya tetap tersimpan.
cp wp-config-sample.php wp-config.phpsed -i.bak 's/database_name_here/wordpress_db/' wp-config.phpDengan -i tidak ada yang tampil di layar, jadi periksa file dengan ls -l.
ls -l wp-config.php*-rw-r--r-- 1 root root 3333 Oct 28 15:13 wp-config.php
-rw-r--r-- 1 root root 3339 Oct 28 15:13 wp-config.php.bakFile yang diubah dan file .bak kini ada berdampingan. Ukurannya berkurang 6 byte karena database_name_here menjadi wordpress_db yang lebih pendek. Membandingkan kedua file dengan diff hanya menampilkan baris yang berubah.
diff wp-config.php.bak wp-config.php23c23
< define( 'DB_NAME', 'database_name_here' );
---
> define( 'DB_NAME', 'wordpress_db' );Baris yang berubah adalah satu baris DB_NAME pada baris 23.
Jika ada beberapa nilai yang diganti, sambungkan skrip dengan -e dan jalankan sekaligus.
sed -i -e 's/username_here/wp_user/' -e 's/password_here/wp_pass/' wp-config.phpgrep -n -e DB_USER -e DB_PASSWORD wp-config.php26:define( 'DB_USER', 'wp_user' );
29:define( 'DB_PASSWORD', 'wp_pass' );Jika -i dan -e ditulis menyatu seperti [-ie], e ikut terbaca sebagai nama cadangan, dan muncul file wp-config.phpe seperti di bawah.
sed -ie 's/127.0.0.1/localhost/' wp-config.phpls wp-config.php*wp-config.php
wp-config.php.bak
wp-config.phpe-i menulis isi yang diubah ke file baru lalu menamainya dengan nama asli, sehingga nomor inode file berbeda sebelum dan sesudah dijalankan.
ls -i wp-config.php207618887 wp-config.phpsed -i 's/localhost/127.0.0.1/' wp-config.phpls -i wp-config.php207618883 wp-config.phpNomor inode yang tadinya 207618887 sebelum dijalankan berubah menjadi 207618883.
Jika file tidak ada atau nama file terlewat, sed berakhir dengan error di bawah dan tidak ada file yang berubah.
sed -i 's/x/y/' no-such.phpsed: can't read no-such.php: No such file or directorysed -i 's/x/y/'sed: no input files5️⃣ Ekspresi reguler sed, mengganti pemisah, dan opsi
🔲 Ekspresi reguler dan mengganti pemisah
Saat mengganti nilai yang berisi garis miring seperti path, pemisah perintah s bercampur dengan garis miring pada nilai, sehingga tiap garis miring pada nilai perlu garis miring terbalik.
sed -n 's/\/var\/www\/example.com/\/srv\/www\/example.com/p' example.conf root /srv/www/example.com;Karakter tepat setelah s menjadi pemisah, jadi jika diganti ke | yang tidak ada di nilai, hasilnya sama tanpa garis miring terbalik.
sed -n 's|/var/www/example.com|/srv/www/example.com|p' example.conf root /srv/www/example.com;Titik (.) pada pola cocok dengan satu karakter apa pun. Di bawah ini hasil pola pencari example.com yang ikut mengubah exampleXcom.
echo 'exampleXcom example.com' | sed 's/example.com/test.org/g'test.org test.orgUntuk mencari titik apa adanya, taruh garis miring terbalik di depannya.
echo 'exampleXcom example.com' | sed 's/example\.com/test.org/g'exampleXcom test.orgBagian dalam tanda kurung dipanggil lagi pada string pengganti dengan [\1]. Dengan -E, tanda kurung dan + dipakai tanpa garis miring terbalik. Di bawah ini hasil yang mempertahankan angka setelah listen dan menambahkan default_server.
sed -nE 's/listen ([0-9]+);/listen \1 default_server;/p' example.conf listen 80 default_server;Jika skrip yang sama dijalankan tanpa -E, tanda kurung terbaca sebagai teks dan muncul error bahwa tidak ada grup yang bisa dipanggil. Untuk memakainya tanpa -E, beri garis miring terbalik pada tanda kurung dan +.
sed -n 's/listen ([0-9]+);/listen \1 default_server;/p' example.confsed: -e expression #1, char 46: invalid reference \1 on `s' command's RHSsed -n 's/listen \([0-9]\+\);/listen \1 default_server;/p' example.conf listen 80 default_server;[&] pada string pengganti berarti seluruh teks yang cocok dengan pola, sehingga Anda dapat menambahkan # di depan bagian yang cocok dan menjadikan baris itu komentar.
sed -n 's/server_name .*;/# &/p' example.conf # server_name example.com www.example.com;🔲 Opsi perintah sed
📌 Opsi utama: hasil dari artikel ini
| Opsi | Fungsi | Hasil di artikel ini | |
|---|---|---|---|
| -n | Mematikan cetak otomatis dan hanya mencetak baris yang dipilih p | sed -n '23p' hanya menampilkan baris 23; tanpa -n, 2p mencetak baris 2 dua kali | |
| -i | Menyimpan hasil ke file asli, bukan ke layar (teks tepat setelahnya ditambahkan ke akhir nama cadangan) | -i.bak membuat wp-config.php.bak; nomor inode berubah setelah dijalankan | |
| -e | Menyambungkan beberapa skrip dan menjalankannya sekaligus | DB_USER dan DB_PASSWORD berubah sekaligus; jika ditulis menyatu sebagai -ie, muncul cadangan wp-config.phpe | |
| -E | Memakai ekspresi reguler lanjutan (tanpa garis miring terbalik pada tanda kurung dan +) | Mencetak listen 80 default_server;; skrip yang sama tanpa -E memberi error [invalid reference] | |
| --follow-symlinks | Bersama -i, mengubah file asli yang ditunjuk tautan | Tanpa opsi ini, file biasa menggantikan tautan dan file asli tetap; dengan opsi ini, nilai asli berubah |
📎 Opsi lainnya: menurut manual resmi
| Opsi | Fungsi | |
|---|---|---|
| -f | Membaca skrip dari file lalu menjalankannya | |
| -r | Ekspresi reguler lanjutan, sama dengan -E (-E lebih portabel) | |
| -s | Memproses tiap file terpisah, bukan sebagai satu aliran yang menyambung | |
| -z | Memisahkan baris dengan karakter null, bukan baris baru | |
| -u | Membaca input sedikit demi sedikit dan mengeluarkan output lebih sering | |
| --posix | Mematikan semua ekstensi GNU | |
| --debug | Mencetak proses eksekusi secara terperinci |
🔲 Simulator perintah sed
Folder kerja simulator di bawah berisi salinan wp-config.php dan example.conf. Anda dapat mengetik sendiri perintah sejauh ini dan memeriksa file yang diubah -i dengan ls -l dan diff.
🔢 FAQ & Konten yang Direkomendasikan







ℹ️ Pemberitahuan Afiliasi
Konten di situs ini berisi tautan afiliasi. Jika pengunjung membeli produk atau layanan melalui tautan tersebut, situs ini menerima komisi dari penjual. Harga yang dibayar pembeli(turun saat ada diskon promo ↓), tidak naik karena hal ini. Harga, diskon, dan informasi stok yang ditampilkan berlaku pada saat penulisan dan bisa berbeda dengan kondisi sebenarnya, jadi pastikan kembali di situs penjual sebelum membeli. Pemilihan dan penilaian produk dibuat berdasarkan standar kami sendiri, dan ada tidaknya komisi tidak memengaruhi urutan maupun isi penilaian.