Pengantar
Sed adalah singkatan dari S tream ED itu Ini adalah perintah Linux yang digunakan untuk mencari, menemukan dan mengganti, atau menyisipkan dan menghapus kata dan baris dalam file teks.
Kasus penggunaan paling umum dari perintah Sed adalah menemukan dan mengganti string dalam file. Saat menggunakan perintah Sed, Anda dapat mengedit file tanpa membukanya.
Artikel ini akan menjelaskan detail penggunaan perintah Sed untuk menemukan dan mengganti string dalam file.
Semua contoh dalam tutorial ini dijalankan di Ubuntu 20.04.
Temukan dan Ganti
Secara default, Sed diinstal di sebagian besar distribusi Linux. Anda dapat memverifikasi instalasi Sed pada sistem Linux Anda dengan menjalankan:
$ sed --v
Outputnya akan seperti ini:
Sintaks dasar menggunakan perintah Sed untuk menemukan dan mengganti teks adalah:
$ sed -i 's/Search_pattern/Replacement_pattern/g' FILE
Di mana:
-i:Opsi ini membuat perintah Sed mengedit file di tempatnya alih-alih menulis output ke output standar.
s:Itu singkatan dari pengganti.
/ /:Karakter pembatas.
g:Ini adalah bendera pengganti Global.
FILE:File yang ingin Anda manipulasi dengan perintah Sed.
Sangat disarankan untuk menempatkan pola pencarian, pola penggantian, dan argumen lainnya dalam tanda kutip.
Sebagai contoh, berikut adalah file teks yang digunakan untuk demonstrasi:
567 Test test test
test /bin/zsh linuxways.net testbar 789
Untuk mengganti semua kata 'test' dengan kata 'linux', jalankan perintah berikut:
$ sed -i 's/test/linux/g' test.txt
Keluaran:
Jika Anda tidak menggunakan flag g, hanya kemunculan pertama dari pola pencarian di setiap baris yang diganti:
$ sed -i 's/test/linux/' test.txt
Keluaran:
Seperti yang Anda lihat, pada contoh sebelumnya, pengujian substring di dalam string testbar juga ditempatkan. Jika Anda tidak ingin mengganti substring dalam pola pencarian, letakkan pola pencarian di antara dua batas kata \b:
$ sed -i 's/\btest\b/linux/g' test.txt
Keluaran:
Untuk membuat pencocokan pola pencarian huruf besar-kecil, mari gunakan tanda I:
$ sed -i 's/test/linux/gI' test.txt
Keluaran:
Di dunia Linux, kita akan menemukan banyak kasus penggunaan yang memiliki karakter pembatas dalam file teks. Kita harus menggunakan garis miring terbalik \ untuk memecahkan karakter pembatas. Misalnya, untuk mengganti /bin/zsh dengan /usr/bin/bash, jalankan:
$ sed -i 's/\/bin\/zsh/\/usr\/bin\/bash/g' test.txt
Keluaran:
Temukan dan Ganti Rekursif
Dalam banyak kasus, Anda ingin mencari direktori secara rekursif untuk file yang memiliki string tertentu dan mengganti string tersebut di semua file.
Misalnya, perintah berikut akan mencari dan mengganti string 'way' dengan 'road' di semua file di direktori saat ini.
$ find . -type f -exec sed -i 's/way/road/g' {} +
Jika nama file mengandung karakter spasi, mari gunakan opsi -print0:
$ find . -type f -print0 | xargs -0 sed -i 's/way/road/g'
Untuk mencari dan mengganti string hanya pada file yang memiliki ekstensi tertentu, jalankan:
$ find . -type f -name "*.java" -print0 | xargs -0 sed -i 's/way/road/g'
Kesimpulan
Anda telah melalui beberapa contoh umum menggunakan perintah Sed. Mencari dan mengganti string teks dalam file dengan perintah Sed tidak serumit yang Anda bayangkan.
Jika Anda memiliki masalah, beri tahu saya di bagian komentar.