Shell bertanggung jawab untuk memperluas variabel. Ketika Anda menggunakan tanda kutip tunggal untuk string, isinya akan diperlakukan secara harfiah, jadi sed
sekarang cobalah untuk mengganti setiap kemunculan literal $var1
dengan ZZ
.
Menggunakan tanda kutip ganda
Gunakan tanda kutip ganda untuk membuat shell memperluas variabel sambil mempertahankan spasi putih:
sed -i "s/$var1/ZZ/g" "$file"
Ketika Anda membutuhkan karakter kutipan di string pengganti, Anda harus mengawalinya dengan garis miring terbalik yang akan ditafsirkan oleh shell. Dalam contoh berikut, string quote me
akan diganti oleh "quote me"
(karakter &
ditafsirkan oleh sed
):
sed -i "s/quote me/\"&\"/" "$file"
Menggunakan tanda kutip tunggal
Jika Anda memiliki banyak karakter meta shell, pertimbangkan untuk menggunakan tanda kutip tunggal untuk pola, dan tanda kutip ganda untuk variabel:
sed -i 's,'"$pattern"',Say hurrah to &: \0/,' "$file"
Perhatikan bagaimana saya menggunakan s,pattern,replacement,
alih-alih s/pattern/replacement/
, saya melakukannya untuk menghindari gangguan /
pada \0/
.
Contoh
Shell kemudian menjalankan perintah di atas sed
dengan argumen berikutnya (dengan asumsi pattern=bert
dan file=text.txt
):
-i
s,bert,Say hurrah to &: \0/,
text.txt
Jika file.txt
berisi bert
, hasilnya akan menjadi:
Say hurrah to bert: \0/