2016-03-05 97 views
0

我想替换每个文件中的字符串让我们调用字符串XXX 我想用开始和结束之间找到的正则表达式模式变量文本替换它在文本文件中搜索和替换 - 使用RegEx变量模式

目前它只是取代这个词,然后就是不替代。

$Pat1 = [regex] '(START)*(END)'  # Find Variable between these 2 first 

Get-ChildItem * -Recurse | Where-Object { 
    $_.Attributes -ne "Directory" 
} | ForEach-Object { 
    (Get-Content $_) -replace "XXX","$Pat1" | Set-Content -path $_ 
} 

示例文本下面

Lorem存有悲坐阿梅德,consectetur adipiscing ELIT。 Quisque porttitor augue quis urna suscipit lobortis。 Cras eu magna sem。 Quisque dictum feugiat convallis。

START 文件名1 END Lorem ipsum dolor sit amet,consectetur adipiscing elit。 Quisque porttitor augue quis urna suscipit lobortis。 Cras eu magna sem。 Quisque dictum feugiat convallis。

XXX Vestibulum risus quam,volutpat iaculis ipsum in,vehicula dictum urna。 Suspendisse dui tortor,faucibus et tellus vitae,malesuada consequat velit。

=================================

+0

您从未为'$ Pat1'执行匹配,因此您将替换为空值。 – TheMadTechnician

+0

喜TMT - 添加我像这样 “$ PAT1” -match – wp44

+0

我一直在努力,这也:的foreach对象{$ _ -replace “XXX”,“(<= START?)*(我?)。? (?= * END)“} | - 似乎没有任何工作:( – wp44

回答

0

的问题是很清楚,但我m猜测你想用文件中的STARTEND之间的值替换XXX,而不是正则表达式模式本身。如果是的话,试试这个:

$Pat1 = [regex] 'START(.*?)END'  #Find Variable between these 2 first 

Get-ChildItem * -Recurse | Where-Object { -not $_.PSIsContainer } | 
ForEach-Object { 
    $text = (Get-Content $_ -Raw) 
    $value = [regex]::Match($text, $Pat1).Groups[1].Value 
    $text -replace "XXX",$value | Set-Content -path $_ 
} 

注意的-replace作品像'text' -replace 'regex-pattern', 'stringvalue'权值不接受正则表达式模式,但只有一个字符串(其中可能包括$0$1等添加全场比赛,被捕获的组1等)

+0

很高兴我能帮助什么我的回答解决你的问题,如果是的话请注明作为原料的答案为例。?你可能想运行'$ value = [regex] :: Match($ text,$ Pat1).Groups [1] .Value.Trim()'来移除额外的引导。和尾随围绕价值 –

+0

嗨弗罗德空格,可惜这并没有取代:( - 因此我张贴样品的XXX是从文件中删除仅 – wp44

+0

它的工作对我来说它替换XXX与'文件名1'没有改变。? ?什么的PowerShell您使用的版本,如果你改变成'$文字=(获取内容$ _ -raw)' –

相关问题