|

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
Contoh dan Cara Pakai Perintah Sed di Linux.

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

Similar Posts

5 1 vote
Article Rating
Subscribe
Notify of
guest

0 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments