我想在PowerShell中逐行读取文件。具体来说,我想遍历文件,将每行存储在循环中的变量中,然后在行上进行一些处理。在PowerShell中逐行读取文件
我知道猛砸相当于:
while read line do
if [[ $line =~ $regex ]]; then
# work here
fi
done < file.txt
没有对PowerShell的多文档循环。
我想在PowerShell中逐行读取文件。具体来说,我想遍历文件,将每行存储在循环中的变量中,然后在行上进行一些处理。在PowerShell中逐行读取文件
我知道猛砸相当于:
while read line do
if [[ $line =~ $regex ]]; then
# work here
fi
done < file.txt
没有对PowerShell的多文档循环。
PowerShell循环中没有太多文档。在PowerShell中环
文档充足,你可能想看看下面的帮助主题:about_For
,about_ForEach
,about_Do
,about_While
。
foreach($line in Get-Content .\file.txt) {
if($line -match $regex){
# Work here
}
}
另一个惯用的PowerShell的解决问题的方法是将管道中的文本文件到ForEach-Object
cmdlet行:
Get-Content .\file.txt | ForEach-Object {
if($_ -match $regex){
# Work here
}
}
取而代之的是循环内正则表达式匹配的,你可以管的线通过Where-Object
来过滤那些你感兴趣的内容:
Get-Content .\file.txt | Where-Object {$_ -match $regex} | ForEach-Object {
# Work here
}
Get-Content
表现不佳;它会尝试一次将文件读入内存。
C#(.NET)文件阅读器读取由一个
foreach($line in [System.IO.File]::ReadLines("C:\path\to\file.txt"))
{
$line
}
我可能会使用'[System.IO.File] :: ReadLines(“C:\ path \ to \ file.txt”)| ForEach-Object {...}'。 'foreach'语句[将整个集合加载到一个对象](https://blogs.technet.microsoft.com/heyscriptingguy/2014/07/08/getting-to-know-foreach-and-foreach-object/ )。 'ForEach-Object'使用一个流水线进行流处理。现在'foreach'语句可能会比'ForEach-Object'命令稍微快一点,但这是因为将整个内容加载到内存通常会更快。然而,Get-Content仍然很糟糕。 –
@BaconBits foreach()是“Foreach-Object”的别名 –
这是一个非常常见的误解。 “foreach”是一个陈述,如“if”,“for”或“while”。 'ForEach-Object'是一个命令,像'Get-ChildItem'。对于'ForEach-Object',还有一个'foreach'的默认别名,但只有在有管线时才使用。请参阅'Get-Help about_Foreach'中的详细解释,或者点击我之前评论中的链接,该链接由Microsoft的The Scripting Guys撰写至整篇文章,内容涉及语句与命令之间的差异。 –
链接不破每行一个,但他们现在重定向到'docs.microsoft.com'。 –
当您尝试阅读大文件时,Get-Content'真的很糟糕 –
@KolobCanyon绝对正确:-)您可以在大小/比例上添加关于性能成本的单独答案 –