grep in Powershell
8,391
Solution 1
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
Solution 2
I find this to be a better alternative than piping dir:
findstr "keyword|regex" *.txt
This doesn't have that wrapping problem.
Related videos on Youtube
Author by
mbx
Updated on September 18, 2022Comments
-
mbx over 1 year
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? -
mbx almost 13 yearsalthough this mostly works, if the line is too long the it's wrapped after 120 characters even when piped to file
-
Rynant over 12 yearsYou won't have an issue with wrapping if you pipe
Select-String
toSet-Content
orAdd-Content