Linux提供了grep工具,用于根据给定的字符串或正则表达式过滤文本数据或输出。这个工具在Linux系统管理员中很流行。另一方面,Windows操作系统通常缺乏这个工具以及Powershell的功能。Powershell提供 Select-String
commandlet提供了Linux grep工具提供的类似特性和选项。在本教程中,我们将使用 Select-String
工具。
救命
帮助关于 Select-String
可以使用以下命令获取。
PS> get-help Select-String

文件中的搜索字符串
最简单的用法和最常用的特性之一就是简单地搜索文件中给定的字符串。我们将提供以下选项
-
-Pattern
指定要搜索的字符串
poet.txt
是我们搜索的文件。
PS> Select-String -Pattern EX .poet.txt

在多个文件中搜索字符串
在前面的示例中,我们在单个文件中搜索了给定的字符串,但实际问题远不止这些。我们可以通过提供带有帮助星号的文件名或扩展名来搜索多个文件中的字符串。在本例中,我们将通过指定 *.txt
文件名。
PS> Select-String -Pattern EX *.txt

递归搜索文件
现在最先进的文件规范是递归搜索文件。递归搜索将在所有当前文件夹和所有子文件夹中查找给定字符串。我们将提供 Get-ChildItem
命令以递归方式向 Select-String
命令 就像下面一样。
PS> Get-ChildItem c:*.txt -Recurse | Select-String -Pattern EX

区分大小写的搜索
默认情况下,搜索给定字符串时不区分大小写。我们可以通过使用 -案件敏感 选项如下。
PS> Select-String -Pattern EX -CaseSensitive *.txt

匹配正则表达式
正则表达式提供定义更丰富和结构化的字符串表达式。 Select-String
命令还支持正则表达式。我们也可以将正则表达式提供到模式中。在这个例子中,我们将使用正则表达式 E.*E
匹配字符串。
PS> Select-String -Pattern "EX.*E" poet.txt

匹配整个单词
默认情况下,给定的搜索词或字符串被部分或全部搜索。如果我们需要匹配被空格包围的整个单词,我们应该在搜索词周围放置空格。我们会搜索的 case
搜索词作为一个完整的词。
PS> Select-String -Pattern " case " poet.txt

显示器 赛前N行
如果我们正在查找文本的某些部分,并且需要查看前面的匹配行,我们可以提供 -Context
选项,其中包含要打印的行数。
PS> Select-String -Pattern "case" -Context 2,0 poet.txt

匹配后显示N行
我们将使用 -Context
选项,但我们将提供后一部分行号。在本例中,我们将在匹配后打印3行。
PS> Select-String -Pattern "case" -Context 0,3 poet.txt

匹配前后显示N行
现在我们将向 -Context
将提供行号前后的位置。在本例中,我们将在一次拍摄中打印匹配前的1行和匹配后的2行。
PS> Select-String -Pattern "case" -Context 1,2 poet.txt

突出显示 比赛
在一个有大量匹配和文本的地方,寻找匹配特别困难。突出匹配将使工作更容易。
反转匹配或不匹配
另一个有用的功能是打印不匹配的行或反转匹配。这就像逻辑 NOT
操作。我们将使用 -NotMatch
显示不匹配行的选项。
PS> Select-String -Pattern "case" -NotMatch poet.txt

匹配项计数
我们可能需要数火柴。如果有很多匹配项,那么逐一计算它们是一项非常琐碎的任务。我们可以使用返回的匹配 count
属性打印匹配行的计数。
PS> $Result = Select-String -Pattern "case" -NotMatch poet.txtPS> $Result.count
