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

时间:2016-11-30 00:04:41

标签: linux bash shell groovy sed

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

我有以下代码。我期待字符串“foo”替换描述文本,但事实并非如此。 而是以下行导致XML更改为: 描述= “sDescription”

我做错了什么?

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

1 个答案:

答案 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 进程来执行此替换语言