我想在PowerShell中逐行读取文件。具体来说,我想遍历文件,将每一行存储在循环中的变量中,并对该行进行一些处理。
我知道Bash等效:
while read line do
if [[ $line =~ $regex ]]; then
# work here
fi
done < file.txt
关于PowerShell循环的文档不多。
@KolobCanyon完全不正确。默认情况下,Get-Content将每一行作为管道中的一个对象加载。如果要传递给未指定
—
鱼
process
块的函数,并且每行将另一个对象吐出到管线中,则该函数就是问题所在。将全部内容加载到内存中的任何问题都不是的错Get-Content
。
@TheFish
—
Kolob Canyon
foreach($line in Get-Content .\file.txt)
在开始迭代之前,它将整个文件加载到内存中。如果您不相信我,请获取1GB的日志文件并尝试一下。
@KolobCanyon那不是你说的。您说Get-Content将所有内容加载到内存中,这是不正确的。是的,您更改的foreach示例将是;foreach不支持管道。
—
鱼
Get-Content .\file.txt | ForEach-Object -Process {}
支持管道,并且不会将整个文件加载到内存中。默认情况下,Get-Content将一次通过管道传递一行。
Get-Content
一次将整个文件加载到内存中,这将失败或冻结大文件。