Saya mencoba menggunakan sed editor aliran di bash untuk mengganti string dalam file ke string baru yang saya masukkan, sejauh ini saya punya ini:
echo "name to change"
read updatenaamold
echo "enter new name:"
read updatenaamnew
sed -i 's/$updatenaamold/$updatenaamnew/g' $naam_dir
echo "name changed"
Ini seharusnya bekerja! Tapi entah bagaimana, di file yang ingin saya edit ada nama yang disebut "bryan" Saya ingin mengeditnya menjadi "bryan name". Saya telah memasukkan nama lama ke dalam variabel yang harus saya masukkan dengan jelas, dan nama baru juga di dalam variabel. Dapatkah seseorang menunjukkan kepada saya mengapa itu tidak berhasil?
Jawaban:
Cukup gunakan penawaran ganda dan bukan penawaran tunggal. (Kutipan tunggal tidak memungkinkan ekspansi variabel).
Catatan 1: Jika
$naam_dir
direktori, itu juga tidak akan berfungsi. Afaiksed
bekerja berdasarkan file-per-file.Catatan 2: Jika pengguna memasukkan karakter khusus (seperti
/ ^ $ []
:) hal-hal tidak akan berfungsi seperti yang diharapkan, karena itu akan membingungkan. Penanganan masalah (tidak yakin apakah ini akan menjadi cara terbaik):Tambahkan sebelum sed. Ini akan menghapus karakter selain huruf dan angka (tanpa spasi, tanpa karakter internasional, dll). Pendekatan lain akan dibatalkan ketika menemukan karakter aneh (dan mencegah kesalahan tidak disengaja).
sumber
Karena Anda menggunakan,
bash
saya sarankan menggunakan memeriksa manipulasi string bash .sumber