2010-04-28 65 views
8

我是powershell中的新手。我有一個簡單的powershell腳本,只是替換文本,但我發現,正則表達式替換將我的多行數據源轉換爲單行文本,當輸出產生時。我想要保留線條。這是腳本的啞巴版本。Powershell替換丟失換行符

$source=(Get-Content textfile.txt) 

$process1 = [regex]::Replace($source, "line", "line2") 

$process1 | out-file -encoding ascii textfile2.txt 

您可以創建簡單的線條像這樣的測試文件調用TextFile.txt的測試它

line 
line 
Some line 
More line here 

我錯過了一些東西明顯?

感謝, Fadrian

回答

17

你的問題就在這裏是Get-Content返回string[](與源文件中的每一行一項),而[regex]::Replace需要一個字符串。這就是爲什麼數組將首先轉換爲一個字符串,這意味着將所有項目集中在一起。

PowerShell中提供了一個操作者-replace將更多地處理這種情況下:

(Get-Content .\textfile.txt) -replace 'line', 'line2' | 
    out-file -encoding ascii textfile2.txt 

-replace操作者在陣列的每個項目進行操作單獨我它應用於陣列。

是的,它會進行正則表達式匹配並替換。例如:

> (Get-Content .\textfile.txt) -replace '(i|o|u)', '$1$1' 
liinee 
liinee 
Soomee liinee 
Mooree liinee heeree 

更多herehere一點。

+0

此作品謝謝。仍然想知道爲什麼正則表達式的行爲方式與.NET環境中實際運行正則表達式不同。 – 2010-04-28 04:25:14

+2

@Fadrian:我在答案的開頭添加了一段話來解釋你的原始問題。希望能幫助到你。 – Joey 2010-04-28 07:42:14

+0

感謝Johannes +1的回覆和+1的帖子 – 2010-04-28 09:34:35