grep in Powershell

What is the mos easy/comfortable way to use Powershells built-in functions to emulate grep like behaviour?

In scripts I use something like this

dir "*.filter" | foreach-object{ $actfile = $_ $readerrorfile = [System.IO.Path]::GetTempFileName() $found = $false $content = Get-Content $actfile 2> $readerrorfile $readerror = Get-Content $readerrorfile if($readerror -match "Error"){ echo "Error while reading from file $actfile" echo $readerror del $readerrorfile Write-Host "stopping execution" exit }else{ del $readerrorfile if($content -match "keyword|regex"){ echo "found in $actfile" $found = true; } }
}

I fairly sure there is an easier/shorter version for that, maybe a one-liner. So, what is the best way to it the grep way?

2 Answers

I normally do something like:

dir *.txt | select-string "keyword|regex"

For a matching file, this shows me the name of the file, the line number and the contents of the line. This is also pipeline-friendly. I suggest that you have a look at Select-string by using:

help Select-String -Detailed
2

I find this to be a better alternative than piping dir:

findstr "keyword|regex" *.txt

This doesn't have that wrapping problem.

Your Answer

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

You Might Also Like