Shell bertanggung jawab untuk memperluas variabel. Bila Anda menggunakan tanda kutip tunggal untuk string, isinya akan diperlakukan secara harfiah, jadi sed
sekarang mencoba untuk mengganti setiap kejadian literal $var1
oleh ZZ
.
Menggunakan tanda kutip ganda
Gunakan tanda kutip ganda untuk membuat shell memperluas variabel sambil mempertahankan spasi:
sed -i "s/$var1/ZZ/g" "$file"
Ketika Anda membutuhkan karakter kutipan dalam string pengganti, Anda harus mendahuluinya dengan garis miring terbalik yang akan ditafsirkan oleh shell. Dalam contoh berikut, string quote me
akan digantikan oleh "quote me"
(karakter &
ditafsirkan oleh sed
):
sed -i "s/quote me/\"&\"/" "$file"
Menggunakan tanda kutip tunggal
Jika Anda memiliki banyak meta-karakter 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 /
di \0/
.
Contoh
Shell kemudian menjalankan perintah di atas sed
dengan argumen berikutnya (dengan asumsi pattern=bert
dan file=text.txt
):
-is,bert,Say hurrah to &: \0/,text.txt
Jika file.txt
berisi bert
, outputnya akan menjadi:
Say hurrah to bert: \0/