我想在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絕對正確:-)您可以在大小/比例上添加關於性能成本的單獨答案 –