2016-11-28 19 views
-1

"Description"プロパティを含むXMLファイルがあります。そのプロパティの内容を別の記述に置き換えたいと思います。私は、私は次の行をしようとしたのGroovyスクリプトREGEXを使用して値をGroovyとSEDに置き換えます。

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

内SEDコマンドを使用していますが、それは、文字列「バー」と「説明」の値の値を置き換えるものではありません。

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

上記の行が間違っていると教えてもらえますか?

アップデート:以下Wiktor第Stribiżewさんのコメントに基づいて、私は、BREの正規表現(すなわち無-Eまたは-rオプション)でをsedのあなたはを使用している最新のエラー

+0

'\('と '\)'を削除するとどうなりますか?または、\( ' - >' \\( '、' \) ' - >' \\) 'のようにバックスラッシュを2倍にしてみてください。また、 '-i'の代わりに' -i.bak'を使いたいかもしれません。 –

+3

なぜあなたはsedを使用していますか? –

+0

@WiktorStribiżewあなたの提案は「予期しない文字」エラーを取り除いた。ただし、 "Description"プロパティの内容を "bar"値に置き換えることはできません。元の投稿を更新します。 – jaxim

答えて

1

を反映するために、コマンドを更新しているので、あなたの()は、のリテラルカッコとして解析され、グループ化構文は解析されません。

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

がうまく動作します:とにかく、あなたは後方参照を使用して、全体の一致を交換しない、全ての括弧を維持する意味がありません。あなたは、変数を使用する必要がある場合

this demoを参照してください

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

としてのsedコマンドが検索されます How do I use variables in a sed command?

参照してください。

+0

カッコを削除すると機能しますが、まだ変数に問題があります。私はgroovyとsedを使用していますので、sedを使用しているときに変数を使用する方法を明確にしていません。 – jaxim

関連する問題