Ben değiştirmek için aşağıdaki kodu çalıştı QQ
ile 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ı QQ
ile 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 $var1
tarafı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 me
değ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 sed
sonraki argümanlarla çalıştırır (varsayarak pattern=bert
ve file=text.txt
):
-i
s,bert,Say hurrah to &: \0/,
text.txt
Eğer file.txt
içeriyorsa bert
, çıkış olacaktır:
Say hurrah to bert: \0/
g
seçenek, yani s,foo,bar,g
onun yerine geçeceksin .
\\0
yerine \0
ne zaman yapılmamalıdır, \0
tek tırnak içine alınır. Aksi halde , tüm eşleşmenin yerine sed
değ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