Advertencia : Esto no considera nuevas líneas. Para una respuesta más profunda, vea esta pregunta SO en su lugar. (Gracias, Ed Morton y Niklas Peter)
Tenga en cuenta que escapar de todo es una mala idea. Sed necesita escapar de muchos personajes para obtener su significado especial. Por ejemplo, si escapa un dígito en la cadena de reemplazo, se convertirá en una referencia inversa.
Como dijo Ben Blank, solo hay tres caracteres que deben escaparse en la cadena de reemplazo (se escapa, barra diagonal para el final de la declaración y & para reemplazar todos):
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"
Si alguna vez necesita escapar de la KEYWORD
cadena, la siguiente es la que necesita:
sed -e 's/[]\/$*.^[]/\\&/g'
Y puede ser utilizado por:
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"
Recuerde, si usa un carácter que no sea /
delimitador, debe reemplazar la barra diagonal en las expresiones anteriores con el carácter que está usando. Vea el comentario de PeterJCLaw para una explicación.
Editado: debido a algunos casos de esquina que anteriormente no se tenían en cuenta, los comandos anteriores han cambiado varias veces. Verifique el historial de edición para más detalles.