Peringatan : Ini tidak mempertimbangkan baris baru. Untuk jawaban yang lebih mendalam, lihat pertanyaan SO ini . (Terima kasih, Ed Morton & Niklas Peter)
Perhatikan bahwa melarikan diri dari segala sesuatu adalah ide yang buruk. Sed membutuhkan banyak karakter untuk melarikan diri untuk mendapatkan makna khusus mereka. Misalnya, jika Anda melepaskan satu digit dalam string pengganti, itu akan berubah menjadi referensi-ulang.
Seperti yang dikatakan Ben Blank, hanya ada tiga karakter yang perlu diloloskan dalam string pengganti (melarikan diri, meneruskan garis miring untuk akhir pernyataan dan & untuk mengganti semua):
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"
Jika Anda perlu keluar dari KEYWORD
string, berikut ini yang Anda butuhkan:
sed -e 's/[]\/$*.^[]/\\&/g'
Dan bisa digunakan oleh:
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"
Ingat, jika Anda menggunakan karakter selain /
sebagai pembatas, Anda perlu mengganti garis miring pada ekspresi di atas dengan karakter yang Anda gunakan. Lihat komentar PeterJCLaw untuk penjelasan.
Diedit: Karena beberapa kasus sudut yang sebelumnya tidak diperhitungkan, perintah di atas telah berubah beberapa kali. Periksa riwayat edit untuk detailnya.