Aku mencoba kode berikut untuk mengganti QQ
dengan ZZ
, tetapi tidak melakukan apa yang saya inginkan:
var1=QQ
sed -i 's/$var1/ZZ/g' $file
Namun, kode ini melakukan apa yang saya inginkan:
sed -i 's/QQ/ZZ/g' $file
Bagaimana cara saya menggunakan variabel sed
?
command-line
bash
sed
UAdapter
sumber
sumber
Jawaban:
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
denganZZ
.Menggunakan tanda kutip ganda
Gunakan tanda kutip ganda untuk membuat shell memperluas variabel sambil mempertahankan spasi putih:
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 olehsed
):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:
Perhatikan bagaimana saya menggunakan
s,pattern,replacement,
alih-alihs/pattern/replacement/
, saya melakukannya untuk menghindari gangguan/
pada\0/
.Contoh
Shell kemudian menjalankan perintah di atas
sed
dengan argumen berikutnya (dengan asumsipattern=bert
danfile=text.txt
):Jika
file.txt
berisibert
, hasilnya akan menjadi:sumber
g
opsi, jadi Anda akan luluss,foo,bar,g
sebagai gantinya.\\0
bukan\0
, itu tidak boleh dilakukan ketika\0
tertutup dalam tanda kutip tunggal. Kalau tidak,sed
akan menggantikan pola untuk literal,\0
bukan seluruh pertandingan.Kita dapat menggunakan variabel dalam
sed
menggunakan tanda kutip ganda:Jika Anda memiliki garis miring
/
pada variabel, gunakan pemisah yang berbeda, seperti di bawah ini:sumber
/
pada variabel => Ini menyelamatkan saya! Variabel saya adalah url dan berisi/
. Beralih untuk digunakan|
sebagai pemisah memperbaiki masalah saya