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' $fileAncak, bu kod istediğimi yapar:
sed -i 's/QQ/ZZ/g' $fileDeğ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' $fileAncak, bu kod istediğimi yapar:
sed -i 's/QQ/ZZ/g' $fileDeğ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.txtEğ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_nameEğ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[bu yazınızdaki cevabıma bakın] (bash - How to escape file path in SED? - Ask Ubuntu )