I just installed grep
on PowerShell through chocolatey
and using it, I could search for a string I want from any text as shown below:
However, I don't want to always have to type grep --color
, hence I tried to make an alias on my $profile
like this:
Function grep($a1){
grep --color $a1
}
but then I would get an error:
So I tried:
Set-Alias grep "grep --color"
but then I get yet another error:
I can't think of anything else to make this work, hence I'd really appreciate any help.
Aliases in PowerShell are mere alternative names for other commands, so you cannot use them to include arguments to pass to these other commands.
You therefore indeed need a function, but since you're naming it the same as the external program you're wrapping, you need to disambiguate so as to avoid an infinite recursion:
function grep {
$externalGrep = Get-Command -Type Application grep
if ($MyInvocation.ExpectingInput) { # pipeline (stdin) input present
# $args passes all arguments through.
$input | & $externalGrep --color $args
} else {
& $externalGrep --color $args
}
}
Note:
$input
variable to relay pipeline (stdin) input means that this input is collected (buffered) in full first. More effort is needed to implement a true streaming solution - see this answer for an example.Alternatively - at least on Unix-like platforms - you can set an environment variable to control grep
's coloring behavior, which may obviate the need for a function wrapper; the equivalent of the --color
parameter is to set $env:GREP_COLOR='always'
(the other supported values are 'never'
and 'auto'
).
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With