Contoh dan Cara Pakai Perintah Sed di Linux.
Perintah sed
atau Stream Editor pada Linux adalah alat yang digunakan untuk memanipulasi dan mengubah teks dalam aliran (stream) atau berkas teks. sed
berguna untuk melakukan berbagai tugas seperti pencarian dan penggantian, penghapusan baris, ekstraksi teks, dan banyak lagi. Berikut adalah sintaks umum dan beberapa contoh penggunaan sed
:
Sintaks Umum
sed [OPTIONS] 'script' input-file
atau
echo "string" | sed [OPTIONS] 'script'
Beberapa opsi umum yang sering digunakan bersama dengan sed
adalah:
-i
: Mengedit file secara langsung (in-place).-e
: Menentukan perintah sed dalam skrip.-n
: Mode “silent” atau “quiet”, hanya mencetak baris yang diminta.-r
atau-E
: Menggunakan ekspresi reguler berdasarkan aturan POSIX (gunakan-r
pada Linux,-E
pada macOS).-f script-file
: Membaca perintah sed dari file skrip.
Sebagai contoh terapan file sample.txt dibawah ini akan menjadi input file yang berisi 3 baris sampel data anak SD. Baris kedua adalah blank space.
text, texting, Text, Texting, textile, texture
test, testing, tester, textless, text
sentence, Sentence, sent, Sent, sentiment, sentinel
Pencarian dan Penggantian (Substitusi) keseluruhan string yang cocok.
Perlu diketahui karakter pertama s
(substitute) dan akhir g
(global) serta tanpa pembatas antar string defaultnya adalah /
. Pencarian pattern yang cocok defaultnya Case Sensitive. Bentuk umumnya adalah sebagai berikut :
sed 's/old_text/new_text/g' input-file
Mencari string text dan menggantinya dengan teks, maka perintahnya seperti dibawah ini.
# sed 's/text/teks/g' sample.txt

Dapat dilihat hasilnya semua string text sudah berubah menjadi teks, dan string texting yang memiliki substring text berubah menjadi teksing.
Untuk Pencocokan pattern Case Insensitive gunakan gunakan karakter I
di bagian akhir. Contohnya perintahnya seperti dibawah ini.
# sed 's/text/teks/gI' sample.txt
teks, teksing, teks, teksing, teksile, teksure
test, testing, tester, teksless, teks
sentence, Sentence, sent, Sent, sentiment, sentinel
Hasilnya semua string ataupun substring text di ganti menjadi teks.
Pencarian dan Penggantian (Substitusi) dengan posisi kata.
Pada akhir pattern bisa didefinisikan posisi ke berapa dari pattern yang cocok, Contoh Perintah dibawah ini :
# sed 's/text/teks/1' sample.txt
Atau
# sed 's/text/teks/' sample.txt
teks, texting, Text, Texting, textile, texture
test, testing, tester, teksless, text
sentence, Sentence, sent, Sent, sentiment, sentinel
Yang dirubah adalah string text yang pertama kali ditemukan di setiap baris.
Berikutnya Melakukan penggantian pada string ke 3 dan seterusnya yang cocok dengan pattern menggunakan flag 3g
, Dengan pattern karakter Case Insensitive I
. Contoh perintah seperti dibawah ini :
# sed 's/text/teks/3gI' sample.txt
text, texting, teks, teksing, teksile, teksure
test, testing, tester, textless, text
sentence, Sentence, sent, Sent, sentiment, sentinel
Pencarian dan Penggantian (Substitusi) pada Line tertentu.
Untuk membatasi perintah sed untuk mengganti string pada nomor baris tertentu cantumkan nomor baris diawal pattern. Contohnya seperti dibawah melakukan pergantian pada baris nomor 2.
# sed '2 s/text/teks/gI' sample.txt
text, texting, Text, Texting, textile, texture
test, testing, tester, teksless, teks
sentence, Sentence, sent, Sent, sentiment, sentinel
Hasilnya baris kedua saja yang terpengaruh.
Berikutnya penerapan substitusi seluruh string te mejadi ta berdasarkan range baris 2-3 men
# sed '2,3 s/te/ta/gI' sample.txt
text, texting, Text, Texting, textile, texture
tast, tasting, tastar, taxtless, taxt
sentance, Sentance, sent, Sent, sentiment, sentinel
Penggunaan Pembatas atau Delimiter
Pada contoh-contoh diatas delimiter atau pembatas dari sebuah ekspresi pattern menggunakan karakter slash /
. Delimiter pattern ini bisa diubah misal menjadi tanda pipe |
.
Contoh dibawah ini karena tanda slash /
ingin digunakan sebagai karakter string substitusi dari /home/. Delimiter di ubah menjadi tanda pipe |
atau titik koma bisa digunakan ;
.
# sed 's|testing|/home/|g' sample.txt
text, texting, Text, Texting, textile, texture
test, /home/, tester, textless, text
sentence, Sentence, sent, Sent, sentiment, sentinel
Menampilkan line yang memilik pattern yang cocok flag p
Flap p
digunakan untuk mencetak kembali line yang cocok dengan pattern, Jadi akan ada double baris jika ada kecocokan. Contonya dibawah ini.
# sed 's|testing|/home/|p'sample.txt
text, texting, Text, Texting, textile, texture
test, /home/, tester, textless, text
test, /home/, tester, textless, text
sentence, Sentence, sent, Sent, sentiment, sentinel
Hasilnya baris kedua akan dicetak kembali, menghasilkan baris duplikat.
Untuk mendapatkan hasil yang lebih jelas dari line yang cocok dengan pattern dan mengalami perubahan bisa ditambahkan opsi -n
# sed -n 's|testing|/home/|p'sample.txt
test, /home/, tester, textless, text
Hasil yang terlihat pada stdOut hanya baris yang cocok dengan pattern.
Penggunaan Batas kata untuk pattern yang lebih selektif
Dari contoh-contoh sebelumnya ketika bertemu string yang mengandung string pattern akan berdampak seperti “text” dan “texting” setiap kata “text” akan terjadi perubahan. Untuk menanggulangi ini bisa menggunakan flag \b
. Contohnya dibawah ini
# sed 's|\btext\b|ok|g' sample.txt
ok, texting, Text, Texting, textile, texture
test, testing, tester, textless, ok
sentence, Sentence, sent, Sent, sentiment, sentinel
Dapat dilihat hasilnya kata texting, textile, texture dan textless tidak berdampak.
Penggunaan sed dengan banyak pattern
Dengan opsi -e
sed mampu menggunakan banyak pattern sehingga bisa dimanfaatkan melakukan perubahan dengan 2 pattern yang berbeda, Contohnya dibawah ini.
sed -e 's/Texting/\/home\//' -e 's/\bsent\b/\(home\)/' sample.txt
text, texting, Text, /home/, textile, texture
test, testing, tester, textless, text
sentence, Sentence, (home), Sent, sentiment, sentinel
Kesimpulan
Dengan penggunaan perintah atau command sed di linux bisa dimanfaatkan untuk melakukan perubahan isi dari string yang dicari, Dan perintah ini bisa digunakan dalam bash script. Untuk mecoba penggunaan tidak perlu langsung melalui shell atau terminal bisa melalui website seperti sed.js.org