powershell - 如何使用Powershell在多个大文件中快速删除包含单词的行

标签 powershell

如何使用PowerShell在多个大文件中快速删除包含单词的行

我正在使用以下代码,但需要很长时间

   $files = Get-ChildItem "D:\mjautomation\v19.0\filesdd\"

foreach ($file in $files) {
   $c = Get-Content $file.fullname | where { $_ -notmatch "deletethisline" }
   $c | Set-Content $file.fullname

最佳答案

由于使用了 switch -File ,因此以下命令应该相当快,但请注意,它需要将每个文件作为一个整体读入内存(减去排除的行):

foreach ($file in Get-ChildItem D:\mjautomation\v19.0\filesdd) {
  Set-Content $file.FullName -Value $(
    switch -Regex -File $file.FullName {
      'deletethisline' {} # ignore
      default { $_ } # pass line through
    }
  )
}
如果您不想将每个文件全部(几乎)读入内存,请使用 [System.IO.StreamWriter] 实例(如this answer所示)写入临时文件,然后替换原始文件。
这样做还有一个好处,就是避免了通过内存内操作写回原始文件所带来的数据丢失的小风险。

关于powershell - 如何使用Powershell在多个大文件中快速删除包含单词的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59758144/

相关文章:

powershell - 通过 Set-AuthenticodeSignature 签署 powershell 脚本时出现未知错误

powershell - 通过Powershell运行远程进程

powershell - 检查传递的参数是字符串和整数

powershell - 如何从TeamCity构建配置中设置PowerShell开关参数

c# - 如何将此 PowerShell 脚本转换为 C#? - 获取项目属性

c# - C# 中的 PowerShell 管理单元问题

powershell - 需要有关 PowerShell 功能和模块的一些帮助

api - 如何批量更新TFS中的多个工作项

powershell - Windows Server 2008 R2 PowerShell和Internet Explorer 9

通过 freeSSHd 运行时 Powershell 脚本不退出