Fitur penting dari sebuah editor teks di antaranya adalah kemampuan cari & ganti (search & replace). Bayangkan repotnya bila harus mengganti banyak kata (atau frase) satu persatu. Di editor Vim, saya biasa gunakan perintah berikut ini bila ingin melakukan search & replace teks tertentu :
:%s/<pattern>/<replacement>/g
<pattern>
maksudnya kata/frase yang ingin saya ganti sementara <replacement>
adalah kata penggantinya. Misalnya saya punya berkas teks yang berisi data koneksi Oracle database seperti contoh berikut ini :
Saya ingin ganti informasi Oracle SID dari uimdb
menjadi uimdbsit
. Dengan menggunakan Vim, saya bisa mengedit satu persatu berkas tersebut lalu menjalankan perintah :
:%/uimdb/uimdbsit/g
Lalu tinggal Save dengan perintah :wq
. Tapi sayangnya cara ini tidak praktis bila ternyata saya punya banyak sekali berkas. Cara yang paling sering saya gunakan adalah dengan bantuan perintah find
, perl
seperti ini :
find . -name "*pola nama file*" -exec perl -pi -e 's/<pattern>/<replacement>/g' {}\;
Contoh saat digunakan seperti ini berikut ini :
Perintah di atas bisa dimodifikasi untuk memanfaatkan fitur-fitur yang dimiliki perintah find
. Misalnya fitur -maxdepth
di atas berguna untuk membatasi area pencarian. Tanpa menggunakan opsi -maxdepth
maka semua berkas berakhiran *.xml
dalam semua sub-directori akan ikut terkena perubahan tadi. Misalnya contoh di bawah ini, ada banyak berkas *.xml
dalam 3 sub-direktori (ditunjukkan dengan garis merah).
Karena saya hanya ingin memodifikasi berkas *.xml
yang berada tepat di bawah direktori jdbc
, saya harus menggunakan opsi maxdepth 1
. Opsi tersebut akan membatasi area pencarian pada direktori itu saja (current directory) tanpa menyentuh berkas *.xml
lain dalam setiap sub-direktori.