Perintah sed: Mengganti String, Menghapus Baris, dan Memakai Opsi -i

Lingkungan ujiKeluarga RHELAlmaLinux 9.8akun rootDiperiksa 2026-10-28

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/blog

Untuk 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/blog

Jika 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_USER
define( '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.php
define( '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.php
define( '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.php
define( '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.php
define( '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.php
32
sed -n '$=' wp-config.php
102

Alamat 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.php
define( '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 WordPress

Cara 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.

🧭 Pattern space sed dan cetak otomatis: p, d pada baris 2
Diagram penjelasan
⚙️ Perintah
$ sed '2p'-n '2p''2d' wp-config.php
Baris yang dibacaEksekusi perintah dan output
Baris 1 → pattern space<?php
➜
Berbeda dari alamat 2: tanpa perintahCetak otomatis 1 kaliTanpa output karena -n
Baris 2 → pattern space/**
➜
Sama dengan alamat 2: jalankan pSama dengan alamat 2: jalankan d1 kali oleh p + 1 kali otomatisHanya 1 kali oleh pMengosongkan pattern space, lanjut ke baris berikutnya
Baris 3 → pattern space * The base configuration for WordPress
➜
Berbeda dari alamat 2: tanpa perintahCetak otomatis 1 kaliTanpa output karena -n
🖥️ Yang tampil di layar (baris 1~3)
<?php/**/** * The base configuration for WordPress
p mencetak pattern space sekali lagi, sehingga tanpa -n baris 2 dicetak dua kali.
-n mematikan cetak otomatis, sehingga hanya baris 2 yang dipilih p yang dicetak sekali.
d mengosongkan pattern space dan lanjut ke baris berikutnya, sehingga baris 2 tidak dicetak otomatis.

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.conf
server {
    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.conf
server {
    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.php
sed -i.bak 's/database_name_here/wordpress_db/' wp-config.php

Dengan -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.bak

File 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.php
23c23
< 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.php
grep -n -e DB_USER -e DB_PASSWORD wp-config.php
26: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.php
ls 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.php
207618887 wp-config.php
sed -i 's/localhost/127.0.0.1/' wp-config.php
ls -i wp-config.php
207618883 wp-config.php

Nomor 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.php
sed: can't read no-such.php: No such file or directory
sed -i 's/x/y/'
sed: no input files

5️⃣ 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.org

Untuk mencari titik apa adanya, taruh garis miring terbalik di depannya.

echo 'exampleXcom example.com' | sed 's/example\.com/test.org/g'
exampleXcom test.org

Bagian 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.conf
sed: -e expression #1, char 46: invalid reference \1 on `s' command's RHS
sed -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

OpsiFungsiHasil di artikel ini
-nMematikan cetak otomatis dan hanya mencetak baris yang dipilih psed -n '23p' hanya menampilkan baris 23; tanpa -n, 2p mencetak baris 2 dua kali
-iMenyimpan 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
-eMenyambungkan beberapa skrip dan menjalankannya sekaligusDB_USER dan DB_PASSWORD berubah sekaligus; jika ditulis menyatu sebagai -ie, muncul cadangan wp-config.phpe
-EMemakai 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-symlinksBersama -i, mengubah file asli yang ditunjuk tautanTanpa opsi ini, file biasa menggantikan tautan dan file asli tetap; dengan opsi ini, nilai asli berubah

📎 Opsi lainnya: menurut manual resmi

OpsiFungsi
-fMembaca skrip dari file lalu menjalankannya
-rEkspresi reguler lanjutan, sama dengan -E (-E lebih portabel)
-sMemproses tiap file terpisah, bukan sebagai satu aliran yang menyambung
-zMemisahkan baris dengan karakter null, bukan baris baru
-uMembaca input sedikit demi sedikit dan mengeluarkan output lebih sering
--posixMematikan semua ekstensi GNU
--debugMencetak 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.

Simulator perintah sedGNU sed
[root@server work]#
Gunakan tombol ↑↓ pada keyboard untuk memanggil kembali perintah yang diketik sebelumnya.

🔢 FAQ & Konten yang Direkomendasikan

wp-config-sample.php WordPress memakai akhir baris CRLF, sehingga tepat sebelum akhir baris ada [\r] yang tidak terlihat. [/false );$/] tidak mencetak satu baris pun, sedangkan pada salinan yang [\r]-nya dihapus dengan [s/\r$//], pola yang sama menemukan baris WP_DEBUG.

-i membuat file biasa baru di tempat tautan dan menyimpan di sana, sehingga file asli yang ditunjuk tautan tidak berubah. Untuk mengubah file asli, tambahkan juga [--follow-symlinks]. Dalam hal ini tautan tetap ada dan nilai aslinya berubah.

Variabel yang diisi dengan NEW=wp_user pun tidak diperluas shell jika ditulis di dalam tanda kutip tunggal, sehingga [$NEW] masuk apa adanya. Saat skrip diapit tanda kutip ganda, shell memperluas variabel lebih dulu dan wp_user masuk di tempat [$NEW].

🧭 Konten perintah teks yang direkomendasikan 9 artikel · 2 referensi
🗂️ Perintah Melihat · Mengedit Teks
📄 Perintah grep 📄 Perintah sort 📄 Perintah uniq 📄 Perintah tee 📄 Perintah sed
📄 Perintah cat 📄 Perintah less 📄 Perintah head · tail 📄 Perintah vi · vim

ℹ️ 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.

Tinggalkan Balasan

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *

Buktikan bahwa Anda manusia: 9   +   1   =