我有一个超过200万行的文本文件,并且我试图删除所有换行符,并将所有文本放在一行中。
我还要同时删除所有多余的空白字符。
尝试#1::我尝试使用Visual Studio 2017,它只会在工作负载上造成kes塞和崩溃。
Find and replace "\s+" with " "
尝试#2::我尝试使用PowerShell成功完成,并将所有连续的空白字符合并为一个空格字符,但由于某种原因未删除任何换行符。
(Get-Content -path "Input.txt") -replace "\n", " " -replace "\r", " " -replace "\s+", " " | Out-File "Output.txt"
显然,Visual Studio是不可能的,因为它无法处理工作。
但是为什么PowerShell可以正确删除多余的空格,但不能删除换行符?
我做错了什么吗?
或者有更好的工具来完成这项工作?
答案 0 :(得分:1)
对于许多基于行的工具来说,您要执行的任务实际上非常困难,因为它们希望在发出输出行之前将其打包在内存中。您要他们将整个文件打包为1行,这对于大文件来说是不切实际的。
如您所见,某些工具甚至根本不考虑替换换行符,以使这种风险最小化。
一种技巧是指定一个选项,告诉该工具使用另一个字符作为换行符或记录分隔符,这些您不想更改的事情经常发生,因此“行数”不太大。空间可能是一个不错的选择。
使用sed
和awk
相对容易,我敢肯定有人会很快为您提供确切的命令行:-)。
答案 1 :(得分:1)
这应该有效。我一次只做一行。并在每行“ $”的末尾添加一个空格。
Get-Content Input.txt | foreach { $_ -replace '\s+',' ' -replace '$',' ' } |
set-content -nonewline Output.txt
答案 2 :(得分:1)
似乎是最好的(和性能最好的)解决方案,是按照评论中的建议添加-raw
。
该命令将在几秒钟内执行,而不是几分钟。
(Get-Content -raw -path "Input.txt") -replace "\s+", " " | Out-File "Output.txt"