使用Groovy和SED命令替换带变量的字符串

问题描述:

我试图替换包含在XML文件中的整个描述字符串。我想用一个变量替换该字符串。我在Groovy脚本中使用SED命令。使用Groovy和SED命令替换带变量的字符串

我有以下代码。我期待字符串“富”来替换描述文本,但它没有。 取而代之的是以下行导致XML更改为: 说明=“sDescription”

我在做什么错?

def sDescription = "foo" 
def sedCommand = 'sed -i \'s/Description="[^"]*"/Description="'$sDescription'"/g\' package.appxmanifest' as String 
+1

为什么不用groovy优秀的XML解析和操作来取代它? –

Groovy变量/表达式替换内部的字符串(内插)只适用于特定类型的字符串文字语法。单引号语法('content')不是其中之一。但是,如果你更换外单引号用双引号("content"),那么你应该让你在寻找插值效果:

def sDescription = "foo" 
def sedCommand = "sed -i 's/Description=\"[^\"]*\"/Description=\"$sDescription\"/g\' package.appxmanifest" as String 

这应该给你一个包含你想运行的命令字符串。请注意我是如何更改字符串中的特殊字符转义(\)以反映字符串分隔符中的更改。

旁白:正如@tim_yates指出的,你为什么要调用一个独立的特设过程时,Groovy中包含内置的语言优秀的XML处理设施做这个替代?

+0

这是答案。非常感谢! – jaxim