我的文本文件是在每个文本块之间用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
答案 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
运算符将匹配任何类型的换行符。