厌倦了在您的计算机上使用像grep这样的老式搜索工具吗?为什么要妥协呢?Windows中有许多grep等效工具可以帮助您精确搜索所需的内容。
在本教程中,您将学习这些grep等效工具如何使得在文件中更快地搜索,并在一瞬间找到所需的信息。
请继续关注并结交强大的搜索工具!
先决条件
本教程包括实践演示。要跟着做,请确保您已准备好以下内容:
- A Window machine – This tutorial uses Windows 10 PC, but any version of Windows will suffice.
- PowerShell – 本教程使用PowerShell 7.2.8。
- scoop – 本教程使用scoop v0.3.1。
在文件中查找特定文本字符串(findstr
)
能够立即发现文件中您正在寻找的特定字符串(具有特定模式)极大地有助于您的工作流程。但是如何做到?转向Windows中的findstr
命令行实用程序,它允许您在文件中搜索特定的文本字符串。
findstr
在Windows中通常被用作类似Unix grep
命令的等价物,因为它具有与其相似的功能。使用findstr
有哪些好处?一个例子是它内置于任何Windows操作系统(OS)中,无需额外的软件。
要在文件中查找特定字符串,请按照以下步骤操作:
使用您喜欢的文本编辑器创建一个文本文件,将其命名为notes.txt,并将下面的内容填充到文件中。
Hello, world. This is an example of a text file.
I am writing some notes in this file.
Here are some keywords to search for: apple banana cherry.
现在,以管理员身份打开PowerShell,并运行下面的命令在notes.txt
文件中查找字符串(findstr
)匹配搜索模式(”apple"
)的命令。
? findstr有许多参数可用于自定义搜索。但在本教程中,您将探索一些在文件中搜索字符串时最有价值的参数。

? 也许您正在多个文件中搜索字符串。如果是这样,请指定由空格分隔的文件路径,如下所示:
findstr parameters "pattern" "C:\\path\\to\\file1.txt" "C:\\path\\to\\file2.txt"
查找与特定模式或文字匹配的字符串
当处理配置文件时,查找特定模式或字面字符串非常关键,特别是在调试过程中。幸运的是,/c
参数告诉findstr
命令搜索与指定模式匹配的字面字符串,包括任何空格或特殊字符。
将/c
参数附加到findstr
命令对以下情况非常有用,但不限于:
- 搜索以特定顺序出现的特定短语或一组单词。
- 搜索包含空格或特殊字符的字符串。
要查看/c
参数如何实际运作,请按照以下步骤进行:
1. 运行下面的findstr
命令,以在*notes.txt*
文件中搜索字面字符串(/c
)banana cherry
。
在下面的输出中,findstr
命令仅返回包含精确字符串banana cherry
的行,并在两个单词之间有一个空格。
请记住,/c
参数区分大小写,因此findstr
命令仅返回与您指定的确切字母大小写相匹配的字符串。如果notes.txt文件中的任何字符串不匹配指定的模式,则findstr
命令将返回空白输出。

2. 接下来,将以下行添加到notes.txt文件中,并保存更改。
在您的 `notes.txt` 文件中,此时应该有两行包含字符串“hello”的内容。一行是全小写的(hello, world.
),另一行是首字母大写的(Hello, world.
)。
hello, world.
3. 现在,请运行以下每个命令来搜索 `notes.txt` 文件中的 hello, world
或 Hello, world
字符串。
请注意,尽管 `notes.txt` 文件中有两行包含 ‘hello, world’ 字符串,但您只会得到一行字符串。
参数 /c
告诉 findstr
命令打印包含 ‘hello, world’ 字符串的行,不区分大小写。

4. 最后,运行以下 findstr
命令来搜索 `notes.txt` 文件中包含 hello
模式的字符串,同时忽略 (/i
) 字母大小写。
如果您已经知道要查找的字符串的实际大小写,区分大小写的搜索效果很好。但如果您希望看到与模式匹配的所有字符串行,而不考虑字母大小写,则参数 /i
就能解决问题。

在文件和目录中查找指定的字符串
除了在文件中搜索特定字符串外,`findstr` 命令还允许您在文件、目录和子目录中搜索匹配的字符串。
假设您希望查找目录中包含特定单词的所有文件。如果是这样,让 /s
参数来处理繁重的工作。
运行以下命令在当前目录及其子目录中搜索 (/s
) 所有包含 *.*
文件中的 system
字符串,忽略大小写 (-i
)
请注意,此命令仅搜索包含整个单词 system
的文件,而不搜索作为更大单词的一部分的文件,比如 systematic 或 systemize。
下面的输出显示了一个文件名列表,每行一个文件,其中包含 ‘system’ 字符串的每个文件的名称。

使用 Select-String
cmdlet 搜索字符串
到目前为止,您已经看到 findstr
命令在查找字符串方面效果非常出色,但不要忽视 Select-String
cmdlet。这个 cmdlet 是 Windows 中的 grep
等效工具,允许您在文件和字符串中搜索特定的文本模式。
Select-String
cmdlet 被设计用于高效搜索,让您能够快速搜索大量文本,并支持 正则表达式(regexes)。因此,此 cmdlet 允许您搜索比 findstr
更复杂的模式。
为了查看Select-String
cmdlet的工作原理,请按照以下步骤进行:
1. 首先打开notes.txt文件,添加以下行,并保存更改。
添加这些行是为了演示Select-String
cmdlet如何处理以下步骤中的大小写问题做的准备。
Apple
APPLE
ApplE
2. 接下来,运行以下命令在notes.txt
文件中搜索字符串apple
。
下面,多行包含‘apple’字符串,但由于Select-String
cmdlet是不区分大小写的,它们的大小写不同。但好的一点是,您可以轻松地查看和验证匹配的字符串,因为它们是突出显示的。

? 也许您希望使用简单的字符串匹配而不是正则表达式匹配。如果是这样,请追加
-SimpleMatch
参数,如下所示,永远不必担心正则表达式语法和特殊字符。Select-String 'APPLE' "C:\\myfiles\\notes.txt" -SimpleMatch
3. 现在,运行以下命令在notes.txt
文件中搜索APPLE
,并启用大小写敏感性(-CaseSensitive
)。-CaseSensitive
参数对于搜索准确性非常有用。
如您下面所看到的,找到的唯一匹配项具有您指定的确切大小写(APPLE)。

4. 最后,运行以下命令,使用正则表达式在$PSHOME\en-US
目录中的所有文本文件(*.txt
)中搜索模式'\?'
(问号)。正则表达式允许您搜索更复杂的模式。
如果文件内容中包含问号,该命令将在控制台中返回文件的完整路径,如下所示。

在Windows中使用ripgrep(rg)作为grep的替代品
rg是一个开源命令行实用程序,旨在快速使用正则表达式模式搜索文件。与其他命令行实用程序一样,rg具有许多选项和功能,可定制您的搜索。
但与findstr
和Select-String
cmdlet不同,rg不会默认安装在Windows操作系统中。
要在Windows中将rg用作grep的替代品:
1. 运行下面的scoop
命令在系统上install
ripgrep
。 scoop install ripgrep

2. 接下来,运行以下rg
命令以验证rg的安装版本。
如下所示,您将看到安装的rg版本号。此时,您现在可以运行rg
命令来搜索字符串。

3. 运行下面的rg
命令在notes.txt
文件中搜索字符串apple
。
输出显示notes.txt文件中包含字符串apple的任何行,如下所示。
请注意,输出类似于Select-String
cmdlet的输出。但是,rg
不是通过突出显示,而是通过更改匹配字符串和行号的颜色来进行快速区分。

4. 现在,运行以下带有正则表达式的命令以在notes.txt
文件中搜索字符串。
以下的正则表达式使用了单词边界(`\b`),告诉 `rg` 查找包含以 ‘s’ 开头、以 ‘e’ 结尾的单词的字符串行(`s\w+e`)。

通过特定文件类型过滤搜索
也许你关心的是文件所在的目录,而不是文件的名称。在这种情况下,通过文件类型来过滤搜索可能是最好的选择。
当你只想搜索特定类型的文件时,将搜索结果过滤到特定文件类型可能是很有用的。或者当你想要排除某些类型的文件时。
要将搜索结果过滤到特定文件类型,使用 `–type` 选项就可以,具体操作如下:
1. 运行以下 `rg` 命令,在 `C:\\myfiles` 目录中的所有文本文件(`–type txt`)中搜索字符串 `apple`。
`–type` 选项需要一个文件类型作为参数,告诉 `rg` 命令只搜索与指定文件类型匹配的文件。
下面的输出显示了包含字符串 ‘apple’ 的行以及关联的文件名(notes.txt)。

2. 接下来,创建一个名为 `notes.xml` 的 XML 文件,并填充以下代码。这个 XML 文件只是为了演示通配符搜索的工作原理。
3. 现在,运行以下命令来在所有(*.
)文件中搜索字符串apple
。此命令仅搜索指定的txt
和xml
文件(-g
)。
默认情况下,rg
区分大小写。因此,输出仅显示包含确切字符串“apple”及其关联文件的行。

4. 最后,像在第三步中那样运行以下命令,以在所有具有txt
或xml
扩展名的文件(*.
)中搜索字符串apple
。但是这次,追加-i
选项,告诉rg
忽略大小写。

结论
通过本教程,您学会了在Windows中搜索字符串的许多grep等效方法,以文字形式和使用正则表达式。您已经通过一系列选项和参数解锁了这些grep等效方法的功能,以自定义搜索并过滤特定文件类型。
在这一点上,您应该对调试问题、识别问题和搜索大量文本文件有信心。
现在,为什么不将您的新技能付诸实践,通过练习正则表达式和定制您的搜索呢?
Source:
https://adamtheautomator.com/grep-equivalents-in-windows/