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.

Share:
8,391

Related videos on Youtube

mbx
Author by

mbx

Updated on September 18, 2022

Comments

  • mbx
    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
    mbx almost 13 years
    although this mostly works, if the line is too long the it's wrapped after 120 characters even when piped to file
  • Rynant
    Rynant over 12 years
    You won't have an issue with wrapping if you pipe Select-String to Set-Content or Add-Content