Colocar variáveis de shell entre aspas simples desativa sua interpretação. É por isso que o seu comando não tem efeito.
$ echo 's/"$OLD_STRING"/"$NEW_STRING"/g'
s/"$OLD_STRING"/"$NEW_STRING"/g
Deve ser escrito assim:
sed -i "s/'$OLD_STRING'/'$NEW_STRING'/g" jboss-beans.xml
Mas as variáveis são interpretadas antes , chamando sed
e novamente contendo caracteres especiais:
$ echo "s/'$OLD_STRING'/'$NEW_STRING'/g"
s/'<property name="webServiceHost">${jboss.bind.address}</property>'/'<!--<property name="webServiceHost">${jboss.bind.address}</property>-->'/g
Por esse motivo, sed
tem esse recurso especial que permite definir os delimitadores de comando s///
simplesmente usando-os, por exemplo:
sed -i "s#'$OLD_STRING'#'$NEW_STRING'#g" jboss-beans.xml
Ainda assim, sua expressão de pesquisa contém caracteres especiais de expressão regular e usar sed
como isso é apenas um desperdício de suas habilidades. Eu escreveria a expressão assim:
sed -i 's/\(<.*webServiceHost.*jboss.bind.address.*>\)/<!---->/' jboss-beans.xml
É claro que você pode tornar a sequência de correspondência mais ou menos específica de acordo com suas necessidades. Há também outro recurso interessante que pode ajudar. sed
permite restringir as operações de edição às linhas que correspondem a um padrão específico. Seu comando poderia ser assim:
sed -i '/webServiceHost/ s/^\(.*\)$/<!---->/' jboss-beans.xml