2016-03-05 92 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)' –