这是powershell脚本
$configFiles = Get-ChildItem . *.scd -rec
foreach ($file in $configFiles)
{
(Get-Content $file.PSPath) |
Foreach-Object {
$_ -replace '<Terminal .+\/>', '' `
-replace '<Terminal [.|\n]*?<\/Terminal>', '' `
-replace '<Private type=\"ABB.*?<\/Private>', '' `
-replace '<ConnectivityNode.*?>.*?<\/ConnectivityNode>', '' `
-replace '\r\n[\t\n\v\f\r ]+\r\n', '\r\n'
} |
Set-Content $file.PSPath
}
第一个替换工作正常,因为标记是单行但其余部分不起作用,没有任何反应,因为它们内部也有其他标记。我想知道正确的正则表达式是什么。
这是我要用&#39;替换(第二次替换)的标签组。 &#39;正则表达式会起作用吗?
<Terminal name="T_grounded" connectivityNode="AA1/J1/Q01/grounded"
substationName="AA1" voltageLevelName="J1" bayName="Q01"
cNodeName="grounded">
<Private type="ABB SLD">
<esld:Line>
<esld:Via x="244" y="116" />
</esld:Line>
</Private>
</Terminal>
在Notepad ++中,它非常简单,因为你可以标记。匹配新行并替换所有行,但我不知道我们将如何在powershell脚本中对其进行调整。
先谢谢,请帮帮我。
答案 0 :(得分:0)
使用模式修饰符,单行,您可以将输入视为全部一行。这使.
匹配换行字符和内容。有些事情是这样的:
$test = @"
some junk
<Terminal name="T_grounded" connectivityNode="AA1/J1/Q01/grounded"
substationName="AA1" voltageLevelName="J1" bayName="Q01"
cNodeName="grounded">
<Private type="ABB SLD">
<esld:Line>
<esld:Via x="244" y="116" />
</esld:Line>
</Private>
</Terminal>
some more junk
"@
$test -replace "(?s)<Terminal.*Terminal>"," "
应该撕掉你想要的东西。
使用(?s)
将编辑:在这种情况下,您还需要以原始数据而不是逐行读取输入。