Ben değiştirmek için aşağıdaki kodu çalıştı QQile ZZ, ama ne istiyorum yapmaz:
var1=QQ
sed -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?
Ben değiştirmek için aşağıdaki kodu çalıştı QQile ZZ, ama ne istiyorum yapmaz:
var1=QQ
sed -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?
Yanıtlar:
Kabuk değişkenleri genişletmekten sorumludur. Eğer dizeleri tek tırnak kullandığınızda bu nedenle, içeriği, kelimenin tam anlamıyla ele alınacaktır sedşimdi literal her geçtiği yerini çalışır $var1tarafından ZZ.
Beyaz alanı korurken kabuğun değişkenleri genişletmesini sağlamak için çift tırnak kullanın:
sed -i "s/$var1/ZZ/g" "$file"
Yedek dizgede alıntı karakterine ihtiyaç duyduğunuzda, onu kabuk tarafından yorumlanacak ters eğik çizgiden önce gelmeniz gerekir. Aşağıdaki örnekte, dize quote medeğiştirilecektir "quote me"(karakter &tarafından yorumlanır sed):
sed -i "s/quote me/\"&\"/" "$file"
Çok fazla kabuk meta karakteriniz varsa, desen için tek tırnak işareti ve değişken için çift tırnak işareti kullanmayı deneyin:
sed -i 's,'"$pattern"',Say hurrah to &: \0/,' "$file"
Ben nasıl kullandıklarını dikkat s,pattern,replacement,yerine s/pattern/replacement/ben müdahaleyi önlemek için yaptı, /in \0/.
Daha sonra kabuk, yukarıdaki komutu bir sedsonraki argümanlarla çalıştırır (varsayarak pattern=bertve file=text.txt):
-i
s,bert,Say hurrah to &: \0/,
text.txt
Eğer file.txtiçeriyorsa bert, çıkış olacaktır:
Say hurrah to bert: \0/
gseçenek, yani s,foo,bar,gonun yerine geçeceksin .
\\0yerine \0ne zaman yapılmamalıdır, \0tek tırnak içine alınır. Aksi halde , tüm eşleşmenin yerine seddeğişmez bir kalıbın yerini alır \0.
sedÇift tırnak işareti kullanmak için değişkenleri kullanabiliriz :
sed -i "s/$var/r_str/g" file_name
/Değişkende eğik çizgi varsa , aşağıdaki gibi farklı ayırıcılar kullanın:
sed -i "s|$var|r_str|g" file_name
/değişkende eğik çizgi varsa => Bu beni kurtardı! Değişkenim bir URL ve içeriyor /. |Ayırıcı olarak kullanmaya geçmek