Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share
menu search
person
Welcome To Ask or Share your Answers For Others

Categories

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
See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
326 views
Welcome To Ask or Share your Answers For Others

1 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?


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share
...