gpt4 book ai didi

Powershell相当于moreutils中的海绵?

转载 作者:行者123 更新时间:2023-12-04 14:51:02 27 4
gpt4 key购买 nike

有一个名为海绵的 GNU 程序,它在写入文件之前吸收输入,因此您可以执行以下操作:cat myFile | grep "myFilter" | sponge myFile
是否有等效的 powershell,因此我可以就地处理文件,而无需通过管道传输到临时文件?

谢谢

最佳答案

在 Powershell 中,明智地使用括号将强制操作在将数据传递给管道中的下一个命令之前完全完成。管道的默认值 Get-Content是将一行一行的管道传递到下一个命令,但在继续之前,它必须形成一个完整的数据集(例如,加载所有行):

(Get-Content myFile) | Select-String 'MyFilter' | Set-Content myFile

另一种可能使用较少内存(我没有对其进行基准测试)的替代方法是仅强制 Select-String 的结果。在继续之前完成:
(Get-Content myFile | Select-String 'MyFilter') | Set-Content myFile

作为附加步骤,您还可以将事物分配给变量。任何技术都会将内容加载到 Powershell session 的内存中,因此要小心处理大文件。

附录: Select-String返回 MatchInfo对象。使用 Out-File由于它尝试将结果格式化为字符串的方式,添加了讨厌的额外空行,但是 Set-Content在写入时正确地将每个对象转换为其自己的字符串,从而产生更好的输出。由于您来自 *nix 并且习惯于返回字符串的所有内容(而 Powershell 返回对象),强制字符串输出的一种方法是将它们通过 foreach 管道传输。转换它们:
(Get-Content myFile | Select-String 'MyFilter' | foreach { $_.tostring() }) | Set-Content myFile

关于Powershell相当于moreutils中的海绵?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6604852/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com