2016-07-26 6 views
-1

Я пытаюсь найти и заменить в powershell несколько xml-файлов рекурсивно. Я бы хотел, чтобы сценарий не заменил некоторые атрибуты совпадающего текста.Условное регулярное выражение в поиске и замене powershell

Например, если взять пример ниже XML

<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 

Можете ли вы дайте мне знать, как использовать условные OR для нескольких условий

+0

Возможно, вы должны выбрать узел xml, используя e. г. xpath, а затем изменить содержимое? –

+0

Я не знаю, правильно ли я вас понимаю. Поскольку это документ xml - вы хотите просто игнорировать узлы, отличные от названия? –

+0

Это всего лишь незначительная вариация вашего предыдущего вопроса. –

ответ

0

Поскольку это XML, я предлагаю, чтобы разобрать эти файлы, такие как 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