Değiştirmek için aşağıdaki kodu denedim QQ
ile ZZ
ama istediğimi yapmıyor.:
var1=QQsed -i 's/$var1/ZZ/g' $file
Ancak, bu kod istediğimi yapar:
sed -i 's/QQ/ZZ/g' $file
Değişkenleri nasıl kullanırım sed
?
Değiştirmek için aşağıdaki kodu denedim QQ
ile ZZ
ama istediğimi yapmıyor.:
var1=QQsed -i 's/$var1/ZZ/g' $file
Ancak, bu kod istediğimi yapar:
sed -i 's/QQ/ZZ/g' $file
Değişkenleri nasıl kullanırım sed
?
Kabuk değişkenleri genişletmekten sorumludur. Dizeler için tek tırnak işaretleri kullandığınızda, içeriği tam anlamıyla işlenecektir, bu nedenle sed
şimdi değişmezin her oluşumunu değiştirmeye çalışıyor $var1
tarafından ZZ
.
Boşluğu korurken kabuğun değişkenleri genişletmesini sağlamak için çift tırnak işaretleri kullanın:
sed -i "s/$var1/ZZ/g" "$file"
Değiştirme dizesinde alıntı karakterine gereksinim duyduğunuzda, kabuk tarafından yorumlanacak bir ters eğik çizgi ile önüne geçmeniz gerekir. Aşağıdaki örnekte, dize quote me
ile değiştirilecektir "quote me"
(karakter &
tarafından yorumlanır sed
):
sed -i "s/quote me/\"&\"/" "$file"
Çok sayıda kabuk meta karakteriniz varsa, desen için tek tırnak işaretleri ve değişken için çift tırnak işaretleri kullanmayı düşünün:
sed -i 's,'"$pattern"',Say hurrah to &: \0/,' "$file"
Nasıl kullandığıma dikkat et s,pattern,replacement,
yerine s/pattern/replacement/
, Ben karışmasını önlemek için yaptım /
içinde \0/
.
Kabuk daha sonra yukarıdaki komutu çalıştırır sed
bir sonraki argümanlarla (varsayarak pattern=bert
ve file=text.txt
):
-is,bert,Say hurrah to &: \0/,text.txt
Eğer file.txt
içeriyor bert
, çıkış olacak:
Say hurrah to bert: \0/
Değişkenleri şu durumlarda kullanabiliriz: sed
çift tırnak işareti kullanma:
sed -i "s/$var/r_str/g" file_name
Eğik çizginiz varsa /
değişkende, aşağıdaki gibi farklı ayırıcı kullanın:
sed -i "s|$var|r_str|g" file_name
Genişletmek için (cinas amaçlanan) @mani'nin cevabı,
perl
|
değişkeninizin değerinde de görünebilir, bu nedenle diğer sınırlayıcıları denemekten korkmayın