2016-11-28 38 views
-1

我有一個包含「Description」屬性的XML文件。我想用不同的描述來替換該財產的內容。我使用的是SED命令Groovy腳本使用REGEX替換值,使用Groovy和SED

<VisualElements Description="foo" Title="title"/> 

我嘗試以下線內,但它不會取代字符串「欄」的「說明」價值的價值。

def sedCommand = 'sed -i \'s/Description="([^"]*)"/Description="bar"/g\' package.appxmanifest' as String 

有人能告訴我什麼是錯誤的上述行嗎?

更新:基於以下Wiktor的Stribiżew的評論,我已經更新了命令,以反映最新的錯誤

+0

如果刪除'\('和'\)'?或者嘗試加倍反斜槓:\(' - >'\\(','\)' - >'\\)'。另外,您可能想使用'-i.bak'而不是'-i'。 –

+3

你爲什麼使用sed?只需使用groovy ... –

+0

@WiktorStribiżew您的建議刪除了「意外字符」錯誤。但是,它仍不會用「bar」值替換「Description」屬性的內容。我會更新原文。 – jaxim

回答

1

您正在使用的sed與BRE正則表達式(即沒有0​​或-r選項),所以你()被解析爲文字括號,而不是分組構造。無論如何,你不使用反向引用和更換整場比賽,沒有一點保留括號都:

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

將工作做好。

如果需要使用變量,看How do I use variables in a sed command?

sed命令將顯示爲

#!/bin/bash 
foo="hello" 
echo '<VisualElements Description="foo" Title="title"/>' | \ 
sed 's/Description="[^"]*"/Description="'$foo'"/g' 

this demo

+0

刪除括號可行,但我仍然有問題與變量。我使用groovy和sed,所以它不像使用sed時那樣清楚如何使用變量。 – jaxim