PowerShell에서 한 줄씩 파일을 읽고 싶습니다. 특히 파일을 반복하고 루프의 변수에 각 행을 저장하고 행에서 일부 처리를 수행하고 싶습니다.
나는 Bash에 해당하는 것을 알고 있습니다.
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
진술은 약간 더 빠를 것입니다 ForEach-Object
(자세한 내용은 아래 주석 참조).
답변
만능 스위치는 여기에서 잘 작동합니다.
'one
two
three' > file
$regex = '^t'
switch -regex -file file {
$regex { "line is $_" }
}
산출:
line is two
line is three