Windows系统下的文件内容搜索命令

之前在Linux上,可以通过grep命令来对文件内容进行查找。但是在Windows系统下,应该如何对文件内容进行搜索呢?

findstr命令

findstr是Windows系统下的自带命令。类似于Linux系统下的grep命令,用法如下

1
findstr 参数 "搜索字符串" [[drive:][path]filename[...]]

其中[drive:]、[path]是可选的,如果省略,默认查找当前目录。findstr命令至少要指定一个文件,可以同时指定多个,用空格分隔。另外,文件名也可以使用通配符,例如*.txt格式。

下面是详细的参数说明

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
FINDSTR [/B] [/E] [/L] [/R] [/S] [/I] [/X] [/V] [/N] [/M] [/O] [/F:file]
[/C:string] [/G:file] [/D:dir list] [/A:color attributes] [/OFF[LINE]]
strings [[drive:][path]filename[ ...]]

/B 在一行的开始配对模式。
/E 在一行的结尾配对模式。
/L 按字使用搜索字符串。
/R 将搜索字符串作为一般表达式使用。
/S 在当前目录和所有子目录中搜索匹配文件。
/I 指定搜索不分大小写。
/X 打印完全匹配的行。
/V 只打印不包含匹配的行。
/N 在匹配的每行前打印行数。
/M 如果文件含有匹配项,只打印其文件名。
/O 在每个匹配行前打印字符偏移量。
/P 忽略有不可打印字符的文件。
/OFF[LINE] 不跳过带有脱机属性集的文件。
/A:attr 指定有十六进位数字的颜色属性。请见 "color /?"
/F:file 从指定文件读文件列表 (/ 代表控制台)。
/C:string 使用指定字符串作为文字搜索字符串。
/G:file 从指定的文件获得搜索字符串。 (/ 代表控制台)。
/D:dir 查找以分号为分隔符的目录列表
strings 要查找的文字。
[drive:][path]filename
指定要查找的文件。

除非参数有 /C 前缀,请使用空格隔开搜索字符串。
例如: 'FINDSTR "hello there" x.y' 在文件 x.y 中寻找 "hello"
"there"'FINDSTR /C:"hello there" x.y' 文件 x.y 寻找
"hello there"

一般表达式的快速参考:
. 通配符: 任何字符
* 重复: 以前字符或类别出现零或零以上次数
^ 行位置: 行的开始
$ 行位置: 行的终点
[class] 字符类别: 任何在字符集中的字符
[^class] 补字符类别: 任何不在字符集中的字符
[x-y] 范围: 在指定范围内的任何字符
\x Escape: 元字符 x 的文字用法
\ 字位置: 字的结束

举个具体的例子来说明findstr命令是如何使用的。

如果我想查找D盘下的VSProjects文件夹内的.cs文件,内容为AddWorkCapital,那么用命令行可以这么写

1
2
3
4
5
6
// 切换到D盘下的VSProjects文件夹
cd D:\VSProjects
// 切换盘符
d:
// 在当前目录和所有子目录中搜索.cs文件,文件内容为AddWorkCapital,忽略大小写,如果有匹配项打印文件名
findstr /MSI "AddWorkCapital" *.cs

总结

有了findstr命令以后,如果我修改了公共库里的代码接口,那么我就可以在项目父目录下搜索所有调用该接口的项目文件了。无需用开发工具一个个地打开项目然后去搜索了。

avatar

chilihotpot

You Are The JavaScript In My HTML