PowerShell: Grep Alternative
Set Recurse = $false when required (e.g. an extensive amount of subdirectories or files).
$searchString = 'P@$$word123!'
$gciParams = @{
Path = '.\config'
Recurse = $true
File = $true
Filter = '*.conf'
}
Get-ChildItem @gciParams |
ForEach-Object {
$file = $_
$match = cat $file.FullName | Select-String $searchString
$match | ForEach-Object {
$relativeFileName = $file.FullName -replace [regex]::escape($pwd)
$matchString = $_.ToString()
$lineNumber = $((cat $file.FullName).IndexOf($matchString) + 1)
$fileLineString = ".$relativeFileName`:$lineNumber"
Write-Output "$fileLineString`:$matchString"
}
}
Or, as a one-liner...
$searchString = 'P@$$word123!' ; $gciParams = @{ Path = '.\config' ; Recurse = $true ; File = $true ; Filter = '*.conf' } ; Get-ChildItem @gciParams | ForEach-Object { $file = $_ ; $match = cat $file.FullName | Select-String $searchString ; $match | ForEach-Object { $relativeFileName = $file.FullName -replace [regex]::escape($pwd) ; $matchString = $_.ToString() ; $lineNumber = $((cat $file.FullName).IndexOf($matchString) + 1) ; $fileLineString = ".$relativeFileName`:$lineNumber" ; Write-Output "$fileLineString`:$matchString" } }