使用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
答
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
为什么不用groovy优秀的XML解析和操作来取代它? –