Uyarı : Bu mu değil yeni satırlar düşünün. Daha ayrıntılı bir yanıt için bunun yerine bu SO sorusuna bakın . (Teşekkürler, Ed Morton ve Niklas Peter)
Her şeyden kaçmanın kötü bir fikir olduğunu unutmayın. Sed , özel anlamlarını elde etmek için kaçmak için birçok karaktere ihtiyaç duyar . Örneğin, değiştirme dizesindeki bir basamaktan kaçarsanız, bir geri başvuruya dönüşür.
Ben Blank'in dediği gibi, yedek dizede kaçması gereken sadece üç karakter var (kendiliğinden kaçıyor, ifadenin sonu ve & tümünü değiştir için eğik çizgi):
ESCAPED_REPLACE=$(printf '%s\n' "$REPLACE" | sed -e 's/[\/&]/\\&/g')
# Now you can use ESCAPED_REPLACE in the original sed statement
sed "s/KEYWORD/$ESCAPED_REPLACE/g"
Eğer KEYWORD
dizeden kaçmanız gerekiyorsa, ihtiyacınız olan şey şudur:
sed -e 's/[]\/$*.^[]/\\&/g'
Ve tarafından kullanılabilir:
KEYWORD="The Keyword You Need";
ESCAPED_KEYWORD=$(printf '%s\n' "$KEYWORD" | sed -e 's/[]\/$*.^[]/\\&/g');
# Now you can use it inside the original sed statement to replace text
sed "s/$ESCAPED_KEYWORD/$ESCAPED_REPLACE/g"
/
Sınırlayıcı dışında bir karakter kullanıyorsanız, kullandığınız karakterin üstündeki ifadelerde eğik çizgiyi değiştirmeniz gerekir. Açıklama için PeterJCLaw'ın yorumuna bakın.
Düzenlendi: Daha önce açıklanmayan bazı köşe vakaları nedeniyle, yukarıdaki komutlar birkaç kez değişti. Ayrıntılar için düzenleme geçmişini kontrol edin.