Sed adalah singkatan dari editor aliran. Itu membaca file yang diberikan, memodifikasi input seperti yang ditentukan oleh daftar perintah sed.
Secara default, input ditulis ke layar, tetapi Anda dapat memaksa untuk memperbarui file.
Sed (Stream EDitor) Perintah Linux 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.
Di sini, di LinuxAPT, sebagai bagian dari Layanan Manajemen Server kami, kami secara teratur membantu Pelanggan kami untuk melakukan kueri terkait Server Linux.
Dalam konteks ini, kita akan melihat bagaimana menggunakan perintah Sed untuk menemukan dan mengganti string dalam file di sistem Ubuntu 20.04.
Temukan dan Ganti di Ubuntu
Secara default, Sed diinstal di sebagian besar distribusi Linux. Anda dapat memverifikasi instalasi Sed pada sistem Linux Anda dengan menjalankan:
$ sed --v
Sintaks dasar menggunakan perintah Sed untuk menemukan dan mengganti teks adalah:
$ sed -i 's/Search_pattern/Replacement_pattern/g' FILE
Dimana:
-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 linuxapt.com testbar 789
Untuk mengganti semua kata 'test' dengan kata 'linux', jalankan perintah berikut:
$ sed -i 's/test/linux/g' test.txt
Jika Anda tidak menggunakan flag g, hanya kemunculan pertama dari pola pencarian di setiap baris yang diganti:
$ sed -i 's/test/linux/' test.txt
Untuk membuat pencocokan huruf besar-kecil pola pencarian tidak sensitif, mari gunakan tanda I:
$ sed -i 's/test/linux/gI' test.txt
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
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 'apt' dengan 'road' di semua file di direktori saat ini.
$ find . -type f -exec sed -i 's/apt/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/apt/road/g'