2012-09-10 44 views
1

我試圖在Powershell的行尾查找並替換一些文本。 (ASCII,TXT,窗戶),我需要一個腳本,這已經用於字符串替換做到這一點:Powershell -creplace在行末找不到表達式

$inputText = [system.IO.File]::ReadAllText("Text.txt") 

$regex = '\\DE$|\DE_02' 

$regex > test.txt 

$th = [system.IO.File]::ReadAllText("test.txt") 

foreach($expression in $th) { 

if ($expression -eq 'EOF') { break } 

$parts = $expression.Split("|") 

if ($parts.Count -eq 2) { 

    $inputText = $InputText -creplace $parts 

    echo $inputText | out-file "Text_neu.txt" -enc ascii 
} 
} 

的cmdlet的工作正常,到目前爲止,但不能行的末尾($)匹配 - .- 我也試過`r`n而不是$,但沒有奏效...

當我嘗試這樣的:

$inputText = [system.IO.File]::ReadAllText("Text.txt") 

$inputText.Replace("\DE\`r\`n","\DE_02\`r\`n") | Out-File Text_neu.txt 

它的人正確地更換。

如何更改現有腳本以使其也能正常工作?

回答

1

我不確定是否正確理解了您的腳本,但我認爲您的問題在於,您將替換整個文本而不是單行。

因此$不是一行的結尾(\r\n它會根據字符串的末尾默認匹配!

您可以通過使用內聯修飾符(?m)來修改此行爲。這將改變$的行爲以匹配行的末尾。

嘗試

$regex = '(?m)\\DE$|\DE_02 

,你的正則表達式。

+0

哦,非常感謝!這可能是這裏的問題......它不像你提出的那樣工作,但現在我知道在哪裏尋找解決方案=) –

+0

哦,現在我明白了!正如你所說的那樣,而不是$ ^^感謝你! =) –