Saya mencoba menulis skrip bash berikut:
HOME_DIR=/opt/my_home
find ./CONFIG -type f -exec sed -i "s/_HOME_DIR_/$_HOME_DIR/g" {} \;
Baris yang ingin saya ubah dalam file adalah ini:
users = "_HOME_DIR_/config/data/_DOMAIN_/users.conf"
Jadi hasil akhirnya harus:
users = "/opt/my_home/config/data/_DOMAIN_/users.conf"
Tapi aku tidak mengerti ... kurasa itu karena melarikan diri karakter ...
Adakah yang bisa menjelaskan?
Terima kasih
command-line
scripts
sed
Felipe Caldas
sumber
sumber
Jawaban:
Dalam keadaan di mana string pengganti atau string pola mengandung garis miring, Anda dapat menggunakan fakta bahwa GNU sed memungkinkan pembatas alternatif untuk perintah pengganti. Pilihan umum untuk pembatas adalah karakter pipa
|
atau hash#
- pilihan terbaik untuk pembatas karakter sering tergantung pada jenis file yang sedang diproses. Dalam kasus Anda, Anda dapat mencobaPerhatikan juga bahwa Anda salah mengetik nama variabel Anda $ HOME_DIR (tidak dimulai dengan garis bawah).
Hanya saja Anda mungkin ingin menghindari penggunaan semua-kap untuk variabel pengguna dalam skrip Anda - mereka harus dicadangkan untuk variabel sistem. Juga
g
saklar tidak diperlukan kecuali jika Anda ingin membuat beberapa pengganti pada satu baris.sumber
Hardcoding variabel 'opt / home' akan berfungsi seperti ini ..
sumber