在PowerShell中为findstr/grep输出着色

在PowerShell中为findstr/grep输出着色,powershell,grep,findstr,Powershell,Grep,Findstr,我发现了很多问题/答案和其他类型的帖子,其中谈到使用alias替换findstr,或alias替换grep。虽然这很有用,但在许多终端环境中,我喜欢grep的一个特点是突出显示找到的文本;通常是红色的 findstr/A:颜色似乎暗示这应该是可能的,甚至是简单的……但我还没有用一个简单的语句来表达它,比如: set-alias grep "findstr /A:color F0" 有办法做到这一点吗 谢谢我选择创建新的别名,因此可能有其他(更好的)方法,而不是我上面写的方法,但这种方法似乎有效

我发现了很多问题/答案和其他类型的帖子,其中谈到使用alias替换findstr,或alias替换grep。虽然这很有用,但在许多终端环境中,我喜欢grep的一个特点是突出显示找到的文本;通常是红色的

findstr/A:颜色似乎暗示这应该是可能的,甚至是简单的……但我还没有用一个简单的语句来表达它,比如:

set-alias grep "findstr /A:color F0"
有办法做到这一点吗


谢谢

我选择创建新的别名,因此可能有其他(更好的)方法,而不是我上面写的方法,但这种方法似乎有效

设置别名
的帮助部分针对参数
说明:

-价值观

   Specifies the name of the cmdlet or command element that is being aliased.
因此,它希望别名命令是cmdlet或command元素

如果执行
Get Help Set Alias-Examples
操作,您将看到最后一个示例,该示例执行与您所希望的类似的操作,即调用命令并指定一些硬编码参数。它使用以下代码执行此操作:

PS C:\>function CD32 {set-location c:\windows\system32}
PS C:\>set-alias go cd32
因此,您需要做的是创建一个函数,该函数执行您想要的操作,然后将该命令别名。这方面的一个例子是:

function Search-Text
{
    & c:\Windows\system32\findstr.exe /A:F0 $Args
}
然后您可以将该新函数别名为
grep
,如下所示:

Set-Alias grep Search-Text
最后,你可以这样称呼它:

grep mysearchword file1.txt file2.txt

注意:当我在普通的PowerShell shell中运行上述代码时(可能是因为这实际上是带有一些额外内容的普通命令shell),这些代码对我来说效果很好,但没有在ISE中获得预期的彩色打印(显然ISE处理主机打印的方式不同).

为什么需要别名和函数?为什么不使用一个名为grep的函数?@Dangph没有理由不能,但一般约定是函数/cmdlet名称应该是描述性的,并且遵循动词-名词模式。缩写名用作快捷方式,应定义为别名。@Nacimota,很公平。就我个人而言,如果函数只存在于我自己的.profile中,我就不会是一个纯粹主义者。