powershellpowershell-ise

Read file line by line in PowerShell


I want to read a file line by line in PowerShell. Specifically, I want to loop through the file, store each line in a variable in the loop, and do some processing on the line.

I know the Bash equivalent:

while read line do
    if [[ $line =~ $regex ]]; then
          # work here
    fi
done < file.txt

Not much documentation on PowerShell loops.


Solution

  • Not much documentation on PowerShell loops.

    Documentation on loops in PowerShell is plentiful, and you might want to check out the following help topics: about_For, about_ForEach, about_Do, about_While.

    foreach($line in Get-Content .\file.txt) {
        if($line -match $regex){
            # Work here
        }
    }
    

    Another idiomatic PowerShell solution to your problem is to pipe the lines of the text file to the ForEach-Object cmdlet:

    Get-Content .\file.txt | ForEach-Object {
        if($_ -match $regex){
            # Work here
        }
    }
    

    Instead of regex matching inside the loop, you could pipe the lines through Where-Object to filter just those you're interested in:

    Get-Content .\file.txt | Where-Object {$_ -match $regex} | ForEach-Object {
        # Work here
    }