嗨,我一直在尋找這一段時間,沒有任何我嘗試過的。請原諒我再次問這個,但在PowerShell中用PowerShell替換空間的新行
$path = "$root\$filename"
Get-Content $path | % $_.Replace "`r`n"," " | Set-Content "$root\bob.txt" -Force
這其中的很多東西我已經試過只是環顧這個網站我一個不能用空格代替新行。
我正在使用powershell v3
嗨,我一直在尋找這一段時間,沒有任何我嘗試過的。請原諒我再次問這個,但在PowerShell中用PowerShell替換空間的新行
$path = "$root\$filename"
Get-Content $path | % $_.Replace "`r`n"," " | Set-Content "$root\bob.txt" -Force
這其中的很多東西我已經試過只是環顧這個網站我一個不能用空格代替新行。
我正在使用powershell v3
這裏有幾個問題。首先,您調用Get-Content的方式,沿着管道發送的字符串將永遠不會有換行符。這是因爲Get-Content默認的工作方式是將文件分成新行,併爲每行輸出一個字符串。其次,您的Foreach命令需要{}圍繞replace命令。試試這個:
Get-Content $path -Raw | Foreach {$_ -replace "`r`n",' ' |
Set-Content $root\bob.txt -Force
的-Raw
參數指示Get-Content
作爲一個字符串來讀取文件內容。這將保留CRLFs
。
Keith Hill's helpful answer很好地解釋了您的代碼問題並提供了一個工作解決方案。但是,Keith的解決方案在輸出線上添加了一個尾隨空間(因爲您自己的解決方案嘗試會完成,如果它工作的話)。
這是一個更簡單的選擇,可以避免這個問題。
(Get-Content $path) -join ' ' | Set-Content -Force $root\bob.txt
(Get-Content $path)
返回陣列線的,請注意,這和Keith的答案都要求將整個輸入文件讀入內存,這對於大文件來說可能存在問題。
[string](Get-Content $path) | Set-Content -Force $root\bob.txt
或
"$(Get-Content $path)" | Set-Content -Force $root\bob.txt
$OFS
是一個自動可變的,它指定在分離器,其將是:
假設你沒有從' '
它的默認值(一個空格)改變$OFS
用於分隔數組元素與它被鑄造爲[string]
。它的默認值是一個空格,並且Get-Content
將返回文件中的一行數組,刪除CRLF。將其轉換爲[string]
然後在文件中生成一行空格分隔的字符串。
如果答案解決了您的問題,請點擊旁邊的大號複選標記(✓)接受答案。 如果您發現其他答案有幫助,請投票給他們。接受和投票有助於未來的讀者。請參閱[相關幫助中心文章](http:// stackoverflow。COM /幫助/人,答案)。如果您的問題尚未得到充分解答,請提供反饋。 – mklement0