我正在尝试替换XML文件中包含的整个描述字符串。我想用变量替换该字符串。我在Groovy脚本中使用SED命令。
我有以下代码。我期待字符串“foo”替换描述文本,但事实并非如此。 而是以下行导致XML更改为: 描述= “sDescription”
我做错了什么?
def sDescription = "foo"
def sedCommand = 'sed -i \'s/Description="[^"]*"/Description="'$sDescription'"/g\' package.appxmanifest' as String
答案 0 :(得分:1)
在字符串内部的Groovy变量/表达式替换中(插值)仅适用于某些类型的字符串文字语法。单引号语法('content'
)不是其中之一。但是,如果用双引号("content"
)替换外部单引号,则应该获得所需的插值效果:
def sDescription = "foo"
def sedCommand = "sed -i 's/Description=\"[^\"]*\"/Description=\"$sDescription\"/g\' package.appxmanifest" as String
这应该为您提供包含您希望运行的命令的字符串。请注意我是如何更改字符串中的特殊字符转义(\
)以反映字符串分隔符的更改。
旁白:正如@tim_yates所述,当Groovy包含优秀的XML操作工具时,为什么还要调用单独的 ad hoc 进程来执行此替换语言