2012-07-17 179 views
2

有沒有辦法使用foreach和替換文本文件來改變一個字符與換行符和x的縮進數?特殊的請求,但它是使其在另一個程序中可讀。替換字符與縮進和換行符在powershell

示例文本:!

dyreriket | {}動物界
leddormer @ {}環節動物
¤igler$ {}環帶綱

符號|,@,¤, $和更多應該用換行符和給定數量的縮進代替。我可以使縮進工作,但不是換行符。使用`n時沒有響應,它只刪除原始字符。到目前爲止,我一直在玩這個代碼。

$t1 = '\@'; 
$r1 = "`n`t`t"; 
$t2='\¤'; 
$r2="`n"; 

Get-Content C:\arter\test.txt ` 
    | ForEach-Object { $_ -creplace $t1, $r1; } ` 
    |ForEach-Object { $_ -creplace $t2, $r2; } ` 
    | Out-File C:\arter\test2.txt ; 

回答

1

你可以做一個行由行文本替換這樣的:

$searchText = '[|[email protected]☼$]'; 
$replacementText = "`r`n`t`t"; 

Get-Content -Path Input.txt ` 
    | ForEach-Object { $_ -creplace $searchText, $replacementText; } ` 
    | Out-File -FilePath Output.txt; 

使用regular expression character classes更換|!@,或$字符出現的所有Input.txt用換行符後跟一個回車符,後跟兩個製表符,並將結果文本寫入Output.txt。要執行不區分大小寫的搜索,請使用-replace-ireplace運算符。

+0

感謝您的迴應,但我得到了一些不一致的結果,這可能是由於保留字符或其他原因造成的。試圖替換|時它會在文檔中的每個字符之間添加't'。它忽略了'n。 – 2012-07-17 15:07:50

+0

'-replace'運算符的替換文本參數是[.NET正則表達式](http://msdn.microsoft.com/library/az24scfc.aspx)。 Pipe是正則表達式中的一個特殊字符,因此您需要將其作爲''\ |''轉義。請注意,您正在爲.NET正則表達式引擎而不是PowerShell進行轉義,這就是您使用反斜槓而不是反向引用的原因。 – BACON 2012-07-17 15:08:45

+0

啊。這解釋了一些,但換行符仍然不起作用:S這裏是我輸入它的代碼。 $ replacementText =「'n't't」; Get-Content C:\ arter \ final1.txt' | ForEach-Object {$ _ -creplace $ searchText,$ replacementText; }' | Out-File C:\ arter \ final2.txt; ' – 2012-07-17 15:17:51