SORU
2 Ocak 2009, Cuma


Bir dize bir sed için kaçış desen değiştirin

Benim bash komut sed desen kullanmalıyım (hangi kullanıcıdan alınan) harici bir dize var.

REPLACE="<funny characters here>"
sed "s/KEYWORD/$REPLACE/g"

Nasıl güvenli bir şekilde edebi bir yedek olarak sed kabul olur $REPLACE dize kaçış miyim?

NOT:KEYWORD vb maçları hayır, aptal bir dize. Kullanıcı tarafından sağlanan değil.

CEVAP
24 NİSAN 2010, CUMARTESİ


PEZ kabul ettiği cevap downvoting için üzgünüm, ama her şey kaçmak kötü bir fikir. Sed birçok karakter için kaçak olması gerekirolsunözel bir anlamı. Yedek dize bir basamak kaçış, örneğin, a ile başlıyor teslim edecektir.

Ben Boş dedi, değiştirme dizesinde kaçtı gereken sadece üç karakter (kendilerini, ileri deyim sonu için ve & Tümünü değiştir için kaçar eğik çizgi) vardır:

sed -e 's/[\/&]/\\&/g'

Eğer hiç KEYWORD dize kaçmak için gerekiyorsa, Aşağıdakilere ihtiyacınız vardır:

sed -e 's/[]\/$*.^|[]/\\&/g'

Ek:Eğer bir karakteri ayırıcı olarak / dışında kullanırsanız unutmayın, bedeli yukarıdaki ifadelerde eğik çizgi yerine kullandığınız karakter gerekir. PeterJCLaw açıklaması yorum bakın.

Anahtar KELİME türevi için düzeltme 1:Eklenen iki karakter Peter.O söz, ve(' ve ')'.'

Anahtar KELİME türevi için düzeltme 2:(' Ve ')' yine. ' kaldırıldı Bunları eklediğim zaman ne düşünüyordum bilmiyorum. Teşekkürler, Jesse.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • nigahiga

    nigahiga

    21 Temmuz 2006
  • SoundHound

    SoundHound

    8 Mart 2006
  • xCraash

    xCraash

    6 Temmuz 2012