powershell搜索和替换中的条件正则表达式

时间:2016-07-26 10:32:53

标签: powershell powershell-v2.0 powershell-v3.0

我试图以递归方式在powershell中搜索和替换多个xml文件。我想避免脚本替换匹配文本的某些遮挡物。

例如,如果您采用以下示例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-site /和/ web-site。

我尝试使用OR运算符并忽略并替换为以下代码,但似乎没有帮助。

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

您能告诉我如何在多种情况下使用条件OR

1 个答案:

答案 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