Powershell用一个

时间:2016-06-24 23:13:02

标签: powershell replace

我的文本文件是在每个文本块之间用2个空行生成的。我可以使用Notepad ++来使用\ r \ n \ n来替换\ r \ n \ r \ n,但必须有一种方法可以自动执行此操作。

我试图在Powershell中提出一些建议,但到目前为止还没有任何工作。

这是我到目前为止所尝试的:

(Get-Content .\test.txt).Replace("\n\n",'\n') | Set-Content .\test.txt
(Get-Content .\test.txt).Replace("\s+\r\n+",'\r\n') | Set-Content .\test.txt
(Get-Content .\test.txt).Replace("\r\n+",'') | Set-Content .\test.txt
(Get-Content .\test.txt).Replace("\n+",'') | Set-Content .\test.txt
(Get-Content .\test.txt).Replace("\r\n\r\n",'\r\n') | Set-Content .\test.txt
(Get-Content .\test.txt).Replace("^(\s+\r\n)",'\r\n') | Set-Content .\test.txt
(Get-Content .\test.txt).Replace("^(\s+\r\n+)",'\r\n') | Set-Content .\test.txt
(Get-Content .\test.txt).Replace("^(\r\n+)",'\r\n') | Set-Content .\test.txt
(Get-Content .\test.txt).Replace("\r\n",'\b') | Set-Content .\test.txt

2 个答案:

答案 0 :(得分:3)

Get-Content会返回一个字符串列表,而不是您需要的整个文本。实际上,你的意思是在字符串上运行这个Replace方法,而不是在字符串列表上运行。

使用Get-Content -Raw .\test.txt将文件内容加载为一个长字符串。

此外,更换的正确形式是:

Replace("`r`n`r`n", "`r`n")

总结一下:

(Get-Content -Raw .\test.txt).Replace("`r`n`r`n", "`r`n") | Set-Content .\test.txt

将完成这项工作。

另一种方法就是过滤掉空行:

$data = Get-Content .\test.txt
$data | Where-Object { $_ } | Set-Content .\test.txt

答案 1 :(得分:2)

PowerShell使用反引号img而不是反斜杠`来转义特殊字符:

\

使用带有条件回车符的正则表达式(Get-Content .\test.txt) -replace "(`r?`n){2}",$([Environment]::Newline) | Set-Content .\test.txt 运算符将匹配任何类型的换行符。