如何使用 PowerShell 检查文件是否包含特定字符串

  1. 使用 PowerShell 中的 Select-String 检查文件是否包含特定字符串
  2. 使用 PowerShell 中的 Get-Content 检查文件是否包含特定字符串
  3. 检查多个包含特定字符串的文件
  4. 结论
如何使用 PowerShell 检查文件是否包含特定字符串

在 Windows PowerShell 中搜索文本文件中的特定字符串是一项常见任务。虽然 Unix 和 Linux 环境中有可靠的 grep 命令,但 PowerShell 提供了一种替代方法,使用 Select-StringGet-ContentGet-ChildItem 命令。

在这篇文章中,我们将探讨如何使用 PowerShell 在文本文件中查找字符串的各种方法。

使用 PowerShell 中的 Select-String 检查文件是否包含特定字符串

假设我们在机器上有一个 Demo.txt 文件,并希望在其中查找字符串 Demonstration

以下是执行此操作的 PowerShell 脚本:

Select-String -Path C:\Users\pc\Demo\Demo.txt -Pattern 'Demonstration'

在这个脚本中,我们使用 Select-String-Path 参数来指定文件位置,使用 -Pattern 参数来指定我们要查找的字符串。

如果我们的文件包含指定的模式('Demonstration'),控制台将输出文件名、行号和包含该字符串的行。

输出:

C:\Users\pc\Demo\Demo.txt:1:This purely for demonstration

上述输出显示了包含我们字符串的 Demo.txt 文件的完整路径、包含我们字符串的行(第 1 行)以及字符串本身(This is purely for demonstration)。

但如果我们只需要知道文件是否包含该字符串呢?在这种情况下,我们可以将脚本修改如下:

$Knw = Select-String -Path C:\Users\pc\Demo\Demo.txt -Pattern "Demonstration"

if ($Knw -ne $null) {
    echo Contains String
}
else {
    echo Does not Contain String
}

在这个脚本中,我们定义了一个名为 $Knw 的变量,它包含了在指定路径的文件中搜索字符串"Demonstration"的结果。然后,我们检查变量 $Knw 是否不等于 $null,这意味着在文件中找到了匹配项。

如果找到了匹配项,打印"Contains String."。如果没有找到匹配项,打印"Does not Contain String."

输出:

Contains String

由于我们的文件确实包含模式"Demonstration",输出打印 Contains String

使用 PowerShell 中的 Get-Content 检查文件是否包含特定字符串

Get-Content 是一个从指定路径读取文件内容并返回字符串对象的命令。要在我们的 Demo.txt 文件中使用 Get-Content,我们将使用如下所示的脚本:

Get-Content -Path C:\Users\pc\Demo\Demo.txt | Select-String -Pattern "Demonstration"

在这个脚本中,我们使用 Get-Content 读取由 -Path 参数指定的 Demo.txt 文件的内容,并将其转发到 Select-String 命令,后者使用 -Pattern 参数来定位 Demonstration 字符串。

输出:

This purely for demonstration

如果我们只想确认字符串的存在,可以使用如下所示的脚本:

If (Get-Content C:\Users\pc\Demo\Demo.txt | % { $_ -match "Demonstration" }) {
    echo Contains String
}
else {
    echo Does not Contains String
}

在这个脚本中,我们使用 Get-Content 读取位于 C:\Users\pc\Demo\Demo.txt 的文件数据,并使用管道(|)逐行处理每一行。在%{} 块内,我们检查每一行是否包含字符串"Demonstration",使用 -match 运算符。

如果文件中的任何一行包含"Demonstration",就打印"Contains String"。如果文件中的任何一行不包含"Demonstration",则打印"Does not Contains String"

输出:

Contains String

由于我们的文件包含指定字符串("Demonstration"),我们得到的输出是 Contains String

检查多个包含特定字符串的文件

如果您有超过五十个文本文件,并希望在所有文件中搜索一个字符串,该怎么办?我们将讨论两种方法来实现。

在 PowerShell 中使用 Get-ChildItemSearch-String

我们可以使用 Get-ChildItemSelect-String 命令。Get-ChildItem 命令将根据我们的搜索条件找到一个或多个文件。

让我们看一个例子。假设我们的 Demo 文件夹有超过五十个文本文件,我们可以使用以下脚本在所有文件中搜索字符串 Demonstration

Get-ChildItem -Path C:\Users\pc\Demo\ -Recurse | Select-String -Pattern 'Demonstration'

在这个脚本中,我们使用 Get-ChildItem 列出指定目录(-Path)及其子目录中的文件(-Recurse)。管道操作符(|)将文件列表传递给 Select-String 命令。

最后,我们使用 Select-String 在每个文件中搜索特定模式'Demonstration'

控制台将输出包含我们字符串的文件名、行号和包含该字符串的行。

输出:

C:\Users\pc\Demo\Demo.txt:1:This purely for demonstration
C:\Users\pc\Demo\Insert.txt:1:We will use this demonstration for a test trial
C:\Users\pc\Demo\myfile.txt:1:This is a demonstration file for Get-ChildItem

在 PowerShell 中使用 Select-String

我们也可以仅使用 Select-String 来检查多个文件中的特定字符串。

Select-String -Path C:\Users\pc\Demo\*.txt -Pattern 'Demonstration'

在这个脚本中,我们在 -Path 参数中使用通配符(*)以搜索 Demo 文件夹中的所有文本文件。Select-String 命令将在所有匹配文件中搜索该字符串。

输出:

C:\Users\pc\Demo\Demo.txt:1:This purely for demonstration
C:\Users\pc\Demo\Insert.txt:1:We will use this demonstration for a test trial
C:\Users\pc\Demo\myfile.txt:1:This is a demonstration file for Get-ChildItem

与上面相同,控制台将输出包含我们字符串的文件名、行号和包含该字符串的行。

结论

Windows PowerShell 提供了一套工具,用于高效地在文本文件中搜索字符串。无论您是喜欢使用 Select-StringGet-Content,还是 Get-ChildItemSelect-String 的组合,您都可以轻松在文件中定位和处理数据。

有了这些命令,您将轻松找到所需的信息,使 PowerShell 中的文本文件搜索变得毫不费力。

Enjoying our tutorials? Subscribe to DelftStack on YouTube to support us in creating more high-quality video guides. Subscribe
作者: John Wachira
John Wachira avatar John Wachira avatar

John is a Git and PowerShell geek. He uses his expertise in the version control system to help businesses manage their source code. According to him, Shell scripting is the number one choice for automating the management of systems.

LinkedIn

相关文章 - PowerShell String