1. find
在一个文件或多个文件中搜索指定的文本字符串。当搜索指定的文件后,find 将显示出包含指定字符串的所有行。
1.1. 语法及注释
find [/v] [/c] [/n] [/i] "string" [[Drive:][Path]FileName[...]]
-
/v
显示所有不包含指定 string 的行。 -
/c
计算包含指定 string 的行并显示总数。 -
/n
将文件行号置于每行开头。 -
/i
指定搜索不区分大小写。 -
"string"
必需。指定要搜索的字符组。必须将 string 包含在引号之内(即,“string”)。 -
[Drive:][Path] FileName
指定要在其中搜索指定字符串的文件的位置和名称。 -
/?
在命令提示符显示帮助。
1.2. 用法
-
指定字符串
如果不使用 /i,find 将精确搜索指定的字符串。例如,find 命令认为字符“a”和“A”是不同的。但是,如果使用 /i,find 不区分大小写,并将“a”和“A”视为同一个字符。如果要搜索的字符串包含引号,必须对包含在字符串中的单引号用双引号引起来,即"StringContaining"“QuotationMarks”。 -
将 find 用作筛选器
如果省略文件名,find 将用作筛选器,从标准输入源(通常是键盘、管道或重定向的文件)得到输入,然后显示任何包含字符串的所有行。 -
命令语法次序
可以按任何顺序键入 find 命令的参数和命令行选项。 -
使用通配符
在用 find 命令指定的文件名或扩展名中不能使用通配符(* 和 ?)。要搜索使用通配符指定的一组文件中的字符串,可以在 for 命令中使用 find 命令。 -
将 /v 或 /n 与 /c 一起使用
如果在相同的命令行中指定 /c 和 /v ,find 将显示不包含指定字符串的行数。如果在相同的命令行中指定 /c 和 /n,find 将忽略 /n。 -
在 find 中使用回车
find 命令不能识别回车。当使用 find 在包含回车的文件中搜索文本时,必须将搜索字符串限制在可以在两个回车之间找到的文本,也就是不能被回车中断的字符串。例如,“tax”与“file”之间出现回车时,find 不会报告找到“tax file”字符串。
1.3. 示例
rem 在当前目录中的文件ben.txt中查找字符串"the pencil",并显示行号
find /n "the pencil" ben.txt
rem 字符串中包含引号,需要使用双引号
find "this is ""pencil""" ben.txt
rem 查找指定目录中的包含指定字符串的文件名
rem dir d:\test /b /s是显示指定目录中的所有文件然后通过|(管道号)将内容作为参数传递给find
dir d:\test /b /s | find ".exe"
rem 将结果输出到文件s.txt
find /n "the pencil" ben.txt > s.txt
rem <是重定向,可以重定向为管道、文件等,重定向为文件和指定文件作用相同。>将结果存在当前目录的s.txt中。
find /n "the pencil" < ben.txt > s.txt
2. findstr
find方法功能相对简单,如果需要更复杂的搜索,可以使用支持正则表达式的findstr。
2.1. 语法及注释
findstr [/b] [/e] [/l] [/r] [/s] [/i] [/x] [/v] [/n] [/m] [/o] [/p] [/offline] [/g:file] [/f:file]
[/c:string] [/d:dirlist] [/a:ColorAttribute] [strings] [[Drive:][Path] FileName [...]]
-
/b
如果位于行的开头则匹配模式。 -
/e
如果位于行的末尾则匹配模式。 -
/l
使用文字搜索字符串。 -
/r
使用搜索串作为常规表达式。Findstr 将所有元字符解释为常规表达式,除非使用了 /l。 -
/s
在当前目录和所有子目录中搜索匹配的文件。 -
/i
指定搜索不区分大小写。 -
/x
打印完全匹配的行。 -
/v
只打印不包含匹配的行。 -
/n
在每个匹配的行之前打印行号。 -
/m
如果文件包含匹配项,仅打印该文件名。 -
/o
在每次匹配行之前打印查找偏移量。 -
/p
跳过包含非可打印字符的文件。 -
/offline
利用脱机属性设置处理文件。 -
/f:file
从指定文件中读取文件列表。 -
/c:string
使用指定的文本作为文字搜索字符串。 -
/g:file
从指定文件得到搜索字符串。 -
/d:dirlist
搜索以逗号分隔的目录列表。 -
/a:ColorAttribute
使用两个十六进制数指定颜色属性。 -
strings
指定要在 FileName 中搜索的文本。 -
[Drive:][Path] FileName […]
指定要搜索的文件。 -
/?
在命令提示符显示帮助。
2.2. 用法
findstr支持正则表达式。
Findstr 可以在任何 ASCII 文件或文件中精确查找所要查找的文本。然而,有时要匹配的信息只有一部分或需要查找更宽广的信息范围。在这种情况下,findstr 具有使用常规表达式搜索各种文本的强大功能。
正则表达式是用于指定文本类型的符号,与精确的字符串相反。标记使用文字字符和元字符。每个在常规的表达式语法中没有特殊意义的字符都是文字字符,与出现的该字符匹配。例如,字母和数字是文字符号。元字符是在正则表达式语法中具有特殊意义(操作符或分隔符)的符号。
下表列出 findstr 接受的元字符。
字符 | 值 |
---|---|
. | 通配符:任何字符 |
* | 重复:以前字符或类的零次或多次出现 |
^ | 行位置:行的开始 |
$ | 行位置:行的结尾 |
[class] | 字符类:集合中任何一个字符 |
[^class] | 反类:不在集合中的任何一个字符 |
[x-y] | 范围:范围:指定范围内的任何字符 |
\x | 取消:元字符 x 的文字用途 |
\<xyz | 字位置:字首 |
xyz\> | 字位置:字尾 |
2.3. 示例
rem 除非有前缀/C,请使用空格隔开搜索字符串,如果搜索hello或there
findstr "hello there" abc.txt
rem 在文件中搜索"hello there"
findstr /c:"hello there" abc.txt
rem 区分大小写,搜索Windows
findstr Windows abc.txt
findstr "Windows" abc.txt
rem 搜索当前目录及所有子目录中的每个文件
findstr /s Windows *.*
rem 搜索当前目录中所有txt文件中的包含"for"的所有行(前面可以有任意个字符包含空格)
findstr /n ".for" *.txt
rem 搜索指定文件中以for开头的字符串,将结果存在指定文件中
findstr /n "for*" a.txt > result.txt
rem 显示搜索的结果是否成功,0表示成功,1表示失败
echo %errorlevel%
rem 更多用法参考正则表达式