Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
338 views
in Technique[技术] by (71.8m points)

linux - Replacing string with variable with Groovy and SED command

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

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

1 Reply

0 votes
by (71.8m points)

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?


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...