使用powershell 3

时间:2015-07-23 01:24:10

标签: file powershell-v3.0

我正在尝试替换文件中的某些文本。目前我用以下内容替换IP地址:

(Get-Content $editfile) | ForEach-Object { $_ -replace "10.10.37.*<", "10.10.37.$BusNet<" } | Set-Content $editfile

此代码在此处运行良好。但是,我无法让代码与其他行一起使用:

  <dbserver>SVRNAME</dbserver>

以下是我为此行编写的代码:

(Get-Content $editfile) | ForEach-Object { $_ -replace "<dbserver>*</dbserver>", "$DbSVRName" } | Set-Content $editfile

上面的代码应该用DbSVRName替换SVRNAME。但事实并非如此。我知道这很简单,我知道事后我会感到愚蠢。我错过了什么?

在调试试图找到解决方案时,我发现由于某种原因它无法看到*

(Get-Content $editfile) | ForEach-Object { $_ -match "<dbserver>*</dbserver>" }

此代码揭示了所有谬误的结果。

1 个答案:

答案 0 :(得分:1)

*无法捕获正则表达式中的内容,您需要.*,特别是(.*?)

$str = 'text  <dbserver>SVRNAME</dbserver> text'
$replace = 'foo'

$str -replace '(<dbserver>)(.*?)(</dbserver>)', ('$1'+$replace+'$3')

输出

text  <dbserver>foo</dbserver> text