poweshell如何处理一个大文本中的一小部分内容


PowerShell交流中心分类: 文件和注册表poweshell如何处理一个大文本中的一小部分内容
0
taohonggou asked 6年 ago

我在工作中遇到了这样的问题:
我需要在一个很大的文本(大概1W行)中替换几行内容,并且在特定位置插入几行文本,然后将修改后的结果重新保存到该文本文件中。
我目前使用的方法是:
读取全部内容,处理好后再写入。我需要处理的文本在前500行,但是依旧需要读取和写入全部文本。
我可以使用

Get-Content .\a.txt -TotalCount 500

读取前500行的内容,但是我处理好后不知道如何替换原来文本中的前500行内容,大家有好的做法吗?

1 Answers
0
Best Answer
Mooser Lee 管理员 answered 6年 ago

首先没有直接只编辑文件前N行的工具,保存文件都是建立新文件覆盖旧文件的基础上,哪怕只更改了一个字符。
针对你的场景1W行的文本文件唯一的优化也就是在读取更改环节。

  1. 读取优化:
    1W行的文本没多少的,直接读到内存中,Get-Content d:\test.txt -Raw 即可。如果可能会有几百兆甚至几十GB的文本可以,可以使用的-ReadCount 500 来提升。
  2. 更改优化:
    只在前500行中执行你的替换和插入逻辑。
  3. 保存优化:
    不确定你是如何保存的,参见《PowerShell提速和多线程》,使用纯.NET 方法[Io.file]::WriteAllLines可以提速70倍。