I have a properties file (myprop.properties) which contains some values: @oneValue@==tcp://localhost:1234 @twoValue@==tcp://localhost:4563 @threeValue@==tcp://localhost7895
I have a xml file (myXmlFile.xml)which contains some tokens:
<application name="aTest">
<NameValuePair>
<name>firstName</name>
<value>@oneValue@</value>
</NameValuePair>
<NameValuePair>
<name>secondName</name>
<value>@twoValue@</value>
</NameValuePair>
</application>
I want to replace the tokens in the file myXmlFile.xml by the values of the myprop.properties. I did a script but I cannot manage to match the tokens with awk, I always get the string "nothing" any ideas?
foreach value ( `cat values` )
set val = `echo $value | awk -F"==" '{print $2}'`
set grp = `echo $value | awk -F"==" '{print $1}'`
sed -i .bak "s/$grp/$val/" file.xml
end
Now, since this uses sed -i, I strongly recommend backing up your .xml file before running this. I've never had sed -i fail me, but your mileage may vary drastically.
If your file corresponding to my values file is long and tedious to escape like I did above, you can use this to rewrite it:
cat values | sed -e 's/\//\\\//g' -e 's/:/\\:/g' >> newvalues
Strictly speaking, it's not necessary to cat the file into sed. Oh, well. Also, the -i can be used here as well, but I tend to err on the side of paranoia where sed -i and other file-overwrite ops are concerned. Lemme know if anything's unclear... my writing can be that way sometimes.