Windows下的grep —— findstr

grep命令可以高效查询处理大量的文本文件,Windows下也有与之类似的findstr。最近在Windows上处理LoadRunner的大量log,使用findstr提高了效率,解决了很多问题。

语法

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 :使用正则表达式来查询。除非使用/l,都会将匹配字符串中的元字符认为是正则表达式
/s :查询当前目录及子目录下的所有文件
/i :指定查询时不区分字母的大小写
/x :输出完全匹配的行
/v :输出不包含匹配的行
/n :在输出显示时带上行号
/m :只输出包含匹配内容的文件名
/o :在每个匹配的行前输出字符偏移量
/p :跳过包含不可打印字符的文件
/offline :使用脱机属性设置处理文件
/f: file :从指定的文件中读取待查询的目标文件
/c: string :使用指定的文本作为文字搜索字符串
/g: file :从指定的文件中读取查询字符串
/d: dirlist :查找以逗号为分隔符的目录列表
/a: ColorAttribute :使用两个十六进制数指定颜色属性
strings :指定查询内容字符串
[ Drive : ][ Path ] FileName […] :指定查询的目标文件
/? :查询帮助

使用正则表达式

findstr中支持的正则表达式见下表:

字符
. 通配符:任何字符
* 重复:零次或多次出现的字符或类
^ 位于行首
$ 位于行尾
[class] 字符类,其中的任何一个字符
[^class] 反字符类,不包含其中的任何字符
[x-y] 范围:指定范围内的任何字符
\x 转义符号:将元字符x用作文本字符
\<xyz 位于单词开头
xyz\> 位于单词末尾

用例

在不使用/c时,可使用空格来分隔多个查询字符串,如要在文件x.y中查找字符串"hello""there"

1
findstr "hello there" x.y

在文件x.y中查找字符串"hello there"需要加/c

1
findstr /c:"hello there" x.y

查找文件Proposal.txt中所有出现的"Windows",匹配大小写:

1
findstr Windows proposal.txt

查找当前目录及所有子目录下所有文件中出现的"Windows",不区分大小写:

1
findstr /s /i Windows *.*

查找所有包含有字符串"FOR",且"FOR"之前以任意数量的空格作为起始的行,并且在显示时打印出行号:

1
findstr /b /n /c:" *FOR" *.bas

如果需要对同一组文件进行几种不同的查询,可以创建一个文件且每行保存一个查询标准。当然也可以将待查询的文件放入一个文本文件。如果需要使用Finddata.txt中的查询标准,将Filelist.txt中的文件作为查询对象,并且将查询结果存储到Results.out,命令如下:

1
findstr /g:finddata.txt /f:filelist.txt > results.out

如果需要在当前目录及子目录下的所有文件中查找"computer",不区分大小写,且输出内容为所有包含有"computer"的文件名,命令如下:

1
findstr /s /i /m "\<computer\>" *.*

如果需要查找的单词不止"computer",还包含其它以comp开头的单词如"compliment""compete"等,则命令为:

1
findstr /s /i /m "\<comp.*" *.*

REFERENCE

https://technet.microsoft.com/en-us/library/bb490907.aspx