Its very tricky to replace a string containing shell metacharacters. Following is how I did it. This is not the complete list but just what was required for me
::::::::::::::
encode.sed
::::::::::::::s/\[/START_SQUARE/g
s/\]/END_SQUARE/g
s/\}/END_CURLY/g
s/{/START_CURLY/g
s/[$]/DOLLAR_SIGN/g
s/["]/DOUBLE_QUOTES/g
s/[|]/PIPE_SIGN/g
s/[/]/FRONT_SLASH/g
::::::::::::::
decode.sed
::::::::::::::s/START_SQUARE/[/g
s/END_SQUARE/]/g
s/END_CURLY/}/g
s/START_CURLY/{/g
s/DOLLAR_SIGN/$/g
s/DOUBLE_QUOTES/"/g
s/PIPE_SIGN/|/g
s/FRONT_SLASH/\//g
::::::::::::::
rep.sh
::::::::::::::old='[ -n ${MY_HOME:=""} ] || source /home/${USER}/app/myvariables.sh'
new='[ -n ${MY_APPS:=""} ] || source ${MY_HOME}/myvariables.sh'
oldx=`echo "${old}" | sed -f encode.sed`
newx=`echo "${new}" | sed -f encode.sed`
cat myshell.sh | sed -f encode.sed | sed 's/'"${oldx}"'/'"${newx}"'/g' | sed -f decode.sed
::::::::::::::
encode.sed
::::::::::::::s/\[/START_SQUARE/g
s/\]/END_SQUARE/g
s/\}/END_CURLY/g
s/{/START_CURLY/g
s/[$]/DOLLAR_SIGN/g
s/["]/DOUBLE_QUOTES/g
s/[|]/PIPE_SIGN/g
s/[/]/FRONT_SLASH/g
::::::::::::::
decode.sed
::::::::::::::s/START_SQUARE/[/g
s/END_SQUARE/]/g
s/END_CURLY/}/g
s/START_CURLY/{/g
s/DOLLAR_SIGN/$/g
s/DOUBLE_QUOTES/"/g
s/PIPE_SIGN/|/g
s/FRONT_SLASH/\//g
::::::::::::::
rep.sh
::::::::::::::old='[ -n ${MY_HOME:=""} ] || source /home/${USER}/app/myvariables.sh'
new='[ -n ${MY_APPS:=""} ] || source ${MY_HOME}/myvariables.sh'
oldx=`echo "${old}" | sed -f encode.sed`
newx=`echo "${new}" | sed -f encode.sed`
cat myshell.sh | sed -f encode.sed | sed 's/'"${oldx}"'/'"${newx}"'/g' | sed -f decode.sed