首页 > 解决方案 > 执行非常大的正则表达式操作的最佳方法是什么?

问题描述

我有一个超过 200 万行的文本文件,我正在尝试删除所有换行符,将所有文本放在一行上。

我还同时删除了任何额外的空白字符。

尝试 #1:我尝试使用 Visual Studio 2017,它只会在工作负载上阻塞和崩溃。
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 正确地删除了额外的空格,而不是换行符?
我做错了什么吗?

还是有更好的工具来完成这项工作?

标签: regexpowershellcommand-line

解决方案


对于许多基于行的工具来说,您请求的任务实际上非常困难,因为它们希望在发出之前将输出行打包到内存中。您要求他们将整个文件打包成 1 行,这对于大文件是不切实际的。

如您所见,有些工具甚至根本不考虑替换换行符,以便将这种风险降到最低。

一个技巧是指定一个选项来告诉该工具使用另一个字符作为换行符或记录分隔符,这是您不想更改的内容,并且经常发生,因此“行”不会太大。太空可能是一个不错的选择。

有了sedawk这相对容易,我相信有人会马上为你提供一个确切的命令行:-)。


推荐阅读