powershell - 是否有与 -append 相反的方式从文件中删除项目?
问题描述
我正在从一个文件中读取用户列表,更改他们的密码,然后写出 2 个文件,一个成功,一个失败。
我想自动化这个过程。我考虑在脚本完成后进行比较,但是当更改成功时,简单地从列表中删除用户会更干净。对于 out-file 函数,是否有与 -Append 相反的东西?我想编辑文件而不是每次都重写整个文件。
解决方案
正如评论中提到的,从文件中“删除一行”并不像大多数图形文本编辑器看起来那么简单!
磁盘上文本文件的逻辑内容只是一串连续的字节值。文本处理器可以通过跟踪最低偏移量修改(即最接近编辑器左上角的修改)来优化磁盘 I/O,然后只将文本的剩余部分从对应的偏移量写入磁盘。文件 - 但您不能只是在文件中间“删除一行”作为文件系统操作 - 这只会在文件数据中留下巨大的空白。
假设问题的最大用户数以数百或数千计,您不必担心磁盘性能,只需在 PowerShell 中删除内存中的相关行并用剩余列表覆盖原始文件:
$allUsers = Get-Content .\full_list.txt
$alreadyProcessed = Get-Content .\success.txt
$remainingUsers = $allUsers | Where-Object { $alreadyProcessed -notcontains $_ }
$remainingUsers |Set-Content .\full_list.txt
推荐阅读
- typescript - Typescript 不会从引用的项目中获取自定义类型
- node.js - Express js 未在状态代码 500 上返回完整错误,但在代码 200 上返回
- javascript - 使用 css 使 div 位置根据其高度固定
- database - Delphi - 将数据库的记录读入字符串网格
- c# - 如何使其从文本文件中读取c#
- elixir - Flow中的并行处理不是并行的吗?
- amazon-web-services - 如何编写 yml 文件将烧瓶应用程序从 github 上传到 aws ec2 windows 实例上的 iis 服务器?
- c - C中的错误:“一元'*'的无效类型参数(具有'int')”,“来自不兼容的指针类型的赋值”
- sql - 一列中的组合超过另一列的分区 - BigQuery
- graphql - 盖茨比内容丰富的嵌入图像