Aynı diziyi bulmak için grep kullanmakta zorlanmama rağmen, bir XML dosyasındaki bir metin dizesini değiştirmek için zorlanıyorum. Değiştirilecek yeni dize ve eski dize çok fazla sayıda özel karakter içerdiğinden, bir ters eğik çizgi kullanmak yerine, onları değişkenlerde saklamanın en iyi olacağını düşündüm:
OLD_STRING='<property name="webServiceHost">${jboss.bind.address}</property>'
NEW_STRING='<!--<property name="webServiceHost">${jboss.bind.address}</property>-->'
Dizeler beklendiği gibi depolanmış gibi görünüyor:
$ echo $OLD_STRING; echo $NEW_STRING
<property name="webServiceHost">${jboss.bind.address}</property>
<!--<property name="webServiceHost">${jboss.bind.address}</property>-->
Grep'ing, eski dizginin XML dosyasında bulunduğunu onaylar:
$ grep "$OLD_STRING" jboss-beans.xml
<property name="webServiceHost">${jboss.bind.address}</property>
Ancak aşağıdaki sed komutu hiçbir şekilde çıktı üretmez:
sed -i 's/"$OLD_STRING"/"$NEW_STRING"/g' jboss-beans.xml
Burada ne kaçırdığımı bilen var mı?
$ sed -i 's|(<.*webServiceHost.*jboss.bind.address.*>)|<!--\1-->|' jboss-beans.xml: -e expression #1, char 55: invalid reference \1 on s' command's RHS
Ayrıca her iki parantezden önce ters eğik çizgi eklemeyi denedim ama yine çıktı alamadım.