Grepping in PowerShell

One tool I really miss sometimes is grep, the command line tool for searching for text matches inside an arbitrary set of files. In the same way you might use “dir” to find a file inside a directory that matches a name pattern, or another outward-facing characteristic like file attribute, you can use grep to find any files containing matching text.

In this most recent episode of pining for grep, I was only interested in finding out if a particular namespace was being used anywhere in my code and didn’t really care where. You could easily extend this code to report the file name when it finds a match.

[string]$SourceFolder = 'D:\MyCode\Source'

$SearchTerms = @( 'using System.' )

Get-ChildItem -Path $SourceFolder -Filter *.cs -Recurse | % {

    $Path = $_.FullName
    $FileContent = Get-Content -Path $Path

    $SearchTerms | % {

        $SearchPattern = $_
        $FileContent | Select-String -Pattern $SearchPattern

Additionally, I used a list of search terms but that could be replaced with a simple string search variable.

Sample output from this script: