У меня возникают трудности с получением sed для замены строки текста в файле XML, несмотря на тот факт, что у меня нет проблем с использованием grep для поиска этой же строки. Поскольку новая строка и старая строка, подлежащая замене, содержат много специальных символов, я подумал, что лучше всего хранить их в переменных, а не использовать множество обратных косых черт:
OLD_STRING='<property name="webServiceHost">${jboss.bind.address}</property>'
NEW_STRING='<!--<property name="webServiceHost">${jboss.bind.address}</property>-->'
Строки, кажется, сохранены как ожидалось:
$ echo $OLD_STRING; echo $NEW_STRING
<property name="webServiceHost">${jboss.bind.address}</property>
<!--<property name="webServiceHost">${jboss.bind.address}</property>-->
Grep'ing подтверждает, что старая строка присутствует в файле XML:
$ grep "$OLD_STRING" jboss-beans.xml
<property name="webServiceHost">${jboss.bind.address}</property>
Но следующая команда sed не выдает никаких результатов:
sed -i 's/"$OLD_STRING"/"$NEW_STRING"/g' jboss-beans.xml
Есть идеи, что мне здесь не хватает?