2016-11-30 281 views
-2

我試圖替換包含在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解析和操作來取代它? –

回答

1

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