如何使用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/