regex - 执行非常大的正则表达式操作的最佳方法是什么?
问题描述
我有一个超过 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 正确地删除了额外的空格,而不是换行符?
我做错了什么吗?
还是有更好的工具来完成这项工作?
解决方案
对于许多基于行的工具来说,您请求的任务实际上非常困难,因为它们希望在发出之前将输出行打包到内存中。您要求他们将整个文件打包成 1 行,这对于大文件是不切实际的。
如您所见,有些工具甚至根本不考虑替换换行符,以便将这种风险降到最低。
一个技巧是指定一个选项来告诉该工具使用另一个字符作为换行符或记录分隔符,这是您不想更改的内容,并且经常发生,因此“行”不会太大。太空可能是一个不错的选择。
有了sed
,awk
这相对容易,我相信有人会马上为你提供一个确切的命令行:-)。
推荐阅读
- c# - 调用“参数”的方法,即使有更具体的方法
- reactjs - 使用图层或其他分组方法显示/隐藏标记组
- ssl - certbot 通配符证书不匹配
- python - 如何在 Python 中将作业发送到网络打印机
- angular - ng2-pdfjs-viewer - 错误:无法匹配任何路由
- pine-script - 如何在 Pine 脚本(Tradingview)中绘制这样的线条?
- ios - RPScreenRecorder.shared().startCapture 不会写入/一直失败
- powerbi - 如何在 Power BI 矩阵的列中添加多个字段并在不向下钻取的情况下查看它们
- vba - 清除 ComboBox 并将索引重置为 -1
- c - 在 Windows 10 上使用 Mingw64 设置谷歌测试(C 语言)