Değişkenleri sed komutunda nasıl kullanırım?


Yanıtlar:


358

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.

Çift tırnak kullanmak

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"

Tek tırnak kullanma

Ç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/.

Örnek

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/

2
Bu virgülle ayrılmış formu kullanarak "/ g" seçeneği nasıl geçebilir?
55'te

6
@ b.long Bu bir gseçenek, yani s,foo,bar,gonun yerine geçeceksin .
Lekensteyn

1
tek alıntı örneğiniz özellikle yararlıdır, regex desenini kullanarak çok güzeldir!
Brian Thomas

Eğer kullanmak için cazip \\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.
Lekensteyn

Numaramı benim için yaptım.
jimh

114

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

7
Eğer /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
sorunumu

İçin Başparmak yukarı "Eğer değişkendeki bir çizgi varsa"
Tiina
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.