我正在尝试替换文件中的某些文本。目前我用以下内容替换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>" }
此代码揭示了所有谬误的结果。
答案 0 :(得分:1)
*
无法捕获正则表达式中的内容,您需要.*
,特别是(.*?)
$str = 'text <dbserver>SVRNAME</dbserver> text'
$replace = 'foo'
$str -replace '(<dbserver>)(.*?)(</dbserver>)', ('$1'+$replace+'$3')
输出
text <dbserver>foo</dbserver> text