I am trying to replace an entire description string contained in an XML file. I would like to replace that string with a variable. I am using a SED command within a Groovy script.
I have the following code. I am expecting the string “foo” to replace the description text but it doesn’t. Instead the following line causes the XML to change to: Description=”sDescription”
What am I doing wrong?
def sDescription = "foo" def sedCommand = 'sed -i 's/Description="[^"]*"/Description="'$sDescription'"/g' package.appxmanifest' as String
Advertisement
Answer
In Groovy variable/expression substitution inside of strings (interpolation) only works with certain types of string literal syntax. Single quote syntax ('content'
) is not one of them. However, if you replace the outer single quotes with double quotes ("content"
) then you should get the interpolation effect you are looking for:
def sDescription = "foo" def sedCommand = "sed -i 's/Description="[^"]*"/Description="$sDescription"/g' package.appxmanifest" as String
This should give you the string that contains the command you wish to run. Please note how I changed the special character escaping () within the string to reflect the change in string delimiters.
Aside: As noted by @tim_yates, Why would you want to invoke a separate ad hoc process to do this substitution when Groovy contains excellent XML manipulation facilities built into the language?