grep 是 Linux 上功能强大的文本搜索实用程序,但在 Windows 上不可用。虽然有第三方端口和解决方案,但 PowerShell 提供了内置的等价物grep ,可以在您的脚本中完成相同的工作。
PowerShell 中有几个不同的搜索实用程序,每个都有自己的优势。最简单的是findstr,它是本机 Windows 可执行文件。这可以很好地替换 grep 在命令行中进行简单的搜索操作。例如,您可以通过管道将其输出ls 以查找匹配项。
ls | findstr "foo"
您还可以一次搜索多个单词,使用通配符匹配任何内容,并使用/R 标志传递基本的正则表达式。
ls | findstr /R ba[az]\.txt
但是,如果要显式搜索包括空格,则需要使用该/C: 标志:
ls | findstr /C:"foo"
如果你习惯了 Linux 命令行,不想记住新命令,可以将“grep”配置为 的别名findstr,这样可以保持肌肉记忆。
new-alias grep findstr
PowerShell 提供的另一种本机方法是Select-String cmdlet,它的功能与findstr.
这意味着它将在 PowerShell 脚本中更好地工作,并且最值得注意的是将其输出作为对象返回,该对象可以由 PowerShell 漂亮地打印出来。它也更容易在命令行上使用,因为 PowerShell 的选项卡补全将与它一起使用。
它的工作原理与 , 一样findstr,也可以使用通配符和正则表达式。
ls | Select-String foo
ls | Select-String -Pattern <regexPattern>
您可以通过Select-String 向其传递参数来使用 grep 文件内的文本-Path 。您还可以将它与从其他 cmdlet(如Get-Content.
Select-String -Path ".\foo.txt" -Pattern ba.*
如果您想在命令行中使用它,也可以将其别名为“grep”以便快速访问。
remove-alias grep
new-alias grep Select-String