从Windows命令提示符搜索

FIND 命令

要在 Windows 命令提示符或批处理文件中搜索多个文件中的文本,可以使用 FIND 命令,该命令自 MS DOS 时代起就已存在,至今仍可在 Windows 11 中使用。它类似于 Unix 中的 grep 命令,但不支持正则表达式。如果想在当前目录搜索单词 borogoves,请遵循以下语法:

find "borogoves" *

注意,模式周围的引号是必需的。如果使用 PowerShell,还需要包含单引号:

find '"borogoves"' *

你可以用 *.htm? 这样的文件掩码代替星号 (*)。find 命令会显示它扫描的文件名,即使这些文件中没有找到匹配项:

默认情况下,搜索是 区分大小写 的,因此通常需要添加 /I 开关以将大小写字母视为等效:

find /I "<a href=" *.htm

如果不指定要搜索的文件,find 将等待从 stdin 输入文本,以便你可以从另一个命令的输出管道输入。例如,可以列出 Windows 中支持的所有复制命令:

help | find /i "copy"

另一个开关 /V,允许你查找所有不包含模式的行,类似于 grep -v 命令。

批处理文件 中,你可以利用 find 命令在未找到模式时将退出代码 (errorlevel) 设置为 1 的事实。例如,可以检查机器运行的是 64 位还是 32 位的 Windows 版本:

@echo off 
rem Based on KB556009 with some corrections reg Query "HKLM\Hardware\Description\System\CentralProcessor\0" /v "Identifier" | find /i "x86 Family" > nul if errorlevel 1 goto win64 
echo 32-bit Windows goto :eof 
:win64 rem Could be AMD64 or ARM64 echo 64-bit Windows

FINDSTR命令:正则表达式搜索

如果您需要查找正则表达式,请尝试使用在Windows XP中引入的FINDSTR命令。由于历史原因,findstr仅支持正则表达式的有限子集,因此您只能使用这些正则表达式功能:

  • 点号.匹配除换行符和扩展ASCII字符外的任何字符。
  • 字符列表[abc]匹配指定字符中的任何一个(abc)。
  • 字符列表范围[a-z]匹配从az的任何字母。
  • 星号(*)表示前一个字符可以重复零次或多次。
  • \<\>符号标记单词的开头和结尾。
  • 插入符号(^)和美元符号($)表示行的开头和结尾。
  • 反斜杠(\)转义任何元字符,允许您查找字面字符。例如,\$查找的是美元符号本身。

Findstr不支持字符类(\d)、交替(|)或其他重复项(+{5})。

基本语法与FIND命令相同:

findstr "\<20[0-9][0-9]\>" *.htm

此命令会在当前目录下的.htm文件中查找所有以2000开头的年份。与find类似,使用/I开关进行不区分大小写的搜索:

FINDSTR的限制与特性

字符列表[a-z]始终不区分大小写,因此echo ABC | findstr "[a-z]"会匹配。

空格字符findstr中作为交替元字符工作,所以像findstr "new shoes" *这样的搜索查询将找到包含newshoes的所有行。不幸的是,无法转义空格并将其用作正则表达式中的实际字符。例如,无法查找以空格开头的行。

正则表达式中的语法错误会被忽略。例如,findstr "[" *将匹配包含[字符的所有行。

如果文件包含Unix换行符(LF),则$元字符不能正确工作。如果文件的最后一行缺少行终止符,findstr将无法找到它。例如,findstr "</html>$" *在</html>后没有CR+LF的情况下将无法正常工作。

早期的Windows版本对findfindstr等命令的行长度有限制。最近的版本取消了这些限制,所以您不再需要担心这个问题。有关findstr的限制和错误,特别是在早期的Windows版本中,请参考这个StackOverflow问题

。findstr命令在OEM(MS DOS)代码页中运行;点元字符不匹配任何扩展ASCII字符。因此,该命令对非英文文本的搜索不太有用。此外,您无法搜索Unicode字符(UTF-8或UTF-16)。

结论

您可以通过键入findstr /?find /?来了解其他开关。例如,附加开关允许您在子目录中搜索或打印行号。您也可以参考官方文档

。总的来说,findfindstr命令已经过时,并具有各种奇怪和限制的问题。

Source:
https://dzone.com/articles/search-from-the-windows-command-prompt