2016-07-26 30 views
-1

私は、powershellで複数のxmlファイルを再帰的に検索して置き換えようとしています。私はスクリプトが一致するテキストの特定の置き換えを置き換えるのを避けたいと思います。あなたは以下のサンプルXMLを取る場合は、私は、文字列/ WEB-を無視したいの上に表示された場合は条件付き正規表現powershellの検索と置換

<title>this is a web-site</title> 
<subtitle>web-site experience</subtitle> 
<path>c:/web-site/web-site.xml</path> 
</doc> 

はスクリプト

<title>this is a new-site</title> 
<subtitle>new-site experience</subtitle> 
<path>c:/web-site/web-site.xml</path> 
</doc> 

後、以下のように変更する必要があります例えば

サイト/および/ webサイト。

私はOR演算子を使用しようとしていますが、以下のコードを無視して置き換えますが、それは役に立たないようです。

$content -replace '(^|[^/])web-site([^/]|$)|(^|[^/])web-site([^.]|$)', '$1new-Site$2' | 
     Out-File $file.FullName -Encoding utf8 

あなたは私がそれのXMLので条件付OR複数の条件のため

+0

おそらくeを使ってxmlノードを選択する必要があります。 g。 xpathを変更してコンテンツを変更しますか? –

+0

私はあなたを正しく理解しているかわかりません。 XML文書なので、タイトル以外のノードは無視しますか? –

+0

これはあなたの前の質問のわずかなバリエーションです。 –

答えて

0

を使用する方法を知っているさせることができ、私はXMLのように、このファイルを解析することをお勧めします。スニペットをご覧ください:

$xml = [xml]"<doc> 
<title>this is a web-site 1</title> 
<title>this is a web-site 2</title> 
<subtitle>web-site experience</subtitle> 
<path>c:/web-site/web-site.xml</path> 
</doc>" 
$xml.doc.SelectNodes("title") | % { $_.InnerText = $_.InnerText.Replace("web-site", "new-site") } 
$xml.doc.title 
+0

残念ながら、これは一致することができる多くの異なるノードがあるので、私はノードとの解析を使用できません。だから代わりに、私は上記のような正規表現を探していた – user2628187

関連する問題