目录
命令格式
命令功能
【filename参数】
【/I参数】
【/N参数】
【/X参数】
【/F:file参数】
【/G:file参数】
【strings和/C:string参数】
【/R参数和/L参数】
findstr命令之参数详解(二)
findstr命令之参数详解(三)
命令格式
findstr [/B] [/E] [/L] [/R] [/S] [/I] [/X] [/V] [/N] [/M] [/O] [/F:file] [/C:string] [/G: file] [/D:dirlist] [/A:colorattributes] [strings] [ [drive:] [path] filename [ ... ] ]
命令功能
使用findstr命令,可以在文件中搜索字符串,并把包含该字符串的所有行的整行内容输出。
【filename参数】
- filename可以是隐藏文件
- filename支持通配符
- filename可以包含相对路径,也可以包含绝对路径
- 如果filename不包括空白,则其两边的双引号可有可无,如果filename中包含空白,则必须使用双引号引起来
- 同一条findstr命令中,可以有多个filename
【/I参数】
指定strings(或/c指定的字符串)不区分字母大小写。默认情况下,strings(或/c指定的字符串)是区分大小写的。
【/N参数】
在匹配的每行前显示行号。行号从1开始计数,即:第一行的行号是1
【/X参数】
输出和搜索文本完全匹配的行。
示例
a.txt的内容如下:
a b c
x y z
a
运行
C:\>findstr /n /x a a.txt
3:a
解析
- 找出整行内容是“a”的行,在a.txt中,只有第3行满足。
【/V参数】
只输出不包含搜索文本的行。
示例
a.txt的内容如下:
a b c
x y z
a
运行
C:\>findstr /v a a.txt
x y z
解析
- 在a.txt中,只有“x y z”这行不包括“a”
【/M参数】
如果文件含有匹配项,只打印其文件名。
示例
a.txt的内容如下:
a b c
x y z
a
运行
C:\>findstr /m a a.txt
a.txt
解析
- 虽然同一文件有多行匹配,但只显示一次该文件名。在a.txt中,第1行和第3行都包含“a”,只输出一次a.txt
【/O参数】
在每个匹配行前, 显示匹配内容的首字符在filename文件中的字符偏移量, 即匹配内容的首字符在filename整个文件中出现的的字符偏移量,字符偏移量从0开始计数。
【注意】行号从1开始计数,即:第一行的行号是1位置。
示例
a.txt的内容如下:
a b c // 末行的回车符算作一个字符 这行共4个字符
x y z // 末行的回车符算作一个字符 这行共4个字符
a
运行
C:\>findstr /o a a.txt
0:a b c
14:a
解析
上述命令匹配了a.txt文件中的两行:
- “a b c”这行:“a”在a.txt文件中的偏移是0
- “a”这行:“a”在a.txt文件中的偏移是14
【/F:file参数】
从file指定的文件读取被搜索的文件列表。 如果从控制台输入, 需使用"/"替换 file。
示例
a.txt的内容如下:
123
456
789
b.txt的内容如下:
123,456,789
one two three
a,b,c
a b c
c.txt的内容如下:
this is a book.
fileList.txt的内容如下:
a.txt
b.txt
c.txt
运行
C:\>findstr /f:fileList.txt 123 // 命令一
a.txt:123
b.txt:123,456,789
C:\>findstr /F:/ 123 // 命令二
a.txt //行末输入回车
a.txt:123
b.txt //行末输入回车
b.txt:123,456,789
c.txt //行末输入回车
^Z //结束输入:ctrl+z,再输入回车
解析
- 命令一:fileList.txt中指定了a.txt、b.txt和c.txt三个文件,在这三个文件中,只有a.txt和b.txt存在包含“123”的行
- 命令二:在控制台输入被搜索的文件列表,操作注意点:
- 输入每个被搜索的文件名后,要输入回车符
- 结束输入:先组合键ctrl+z,再输入回车
【/G:file参数】
从file指定的文件读取搜索文本。如果从控制台读取,需使用 "/" 替换 fife。
示例
a.txt的内容如下:
one two three
11 22 33
a b c
text.txt内容如下:
one
a
运行
C:\>findstr /n /g:/ a.txt // 命令一
one //行末输入回车
a //行末输入回车
^Z //结束输入:ctrl+z,再输入回车
1:one two three
3:a b c
C:\>findstr /n /g:text.txt a.txt // 命令二
1:one two three
3:a b c
解析
- 命令一:在控制台中输入搜索文本(“one”和“a”),然后找出a.txt文件中包含“one”或者“a”的行
- 命令二:从text.txt文件读取搜索文本(“one”和“a”),然后找出a.txt文件中包含“one”或者“a”的行
【strings和/C:string参数】
- /C:string参数在同一条findstr命令中可以多次出现,即:在一条findstr命令中可以存在多个/C:string参数
- strings在同一条findstr命令中不能出现多次,即:在一条findstr命令中最多只能存在一个strings
- strings或/C:string参数都可用于指定搜索文本,默认情况下,搜索文本区分大小写
- strings或/C:string参数都不支持DOS通配符
- strings或/C:string参数不能同时出现在一条findstr命令中,所以, findstr命令有两种使用格式,如下:
- findstr [option ...] /C:string [/C:string ...] filename [ ... ]] /L是缺省值
- findstr [option ...] strings filename [ ... ]] /R是缺省值
- strings或/C:string参数指定的字符串如果包含空格,则空格的含义是不同的。
- strings指定的字符串如果包含空格(多个连续的空格被看作一个空格),则该空格会被当作多个搜索文本的分隔符,而不是空格字符本身。【注意】被空格分隔的每段搜索文本都会单独在文件中进行匹配,并且把各自的匹配结果输出。
- /C:string参数指定的字符串如果包含空格(多个连续的空格不能看作一个空格),则该(些)空格不会被当作多个搜索文本的分隔符,而是空格字符本身。由于findstr支持的正则表达式元字符中没有表示空格的元字符,所以,要使用/R指定搜索文本,且想匹配搜索文本中的空格(如果存在),那么使用“findstr /R /C filename”是个不错的主意。
示例
a.txt的内容如下:
a b c
x y z
abc
zyz
运行
C:\>findstr /r /c:"^a b" a.txt //命令一
a b c
C:\>findstr /c:"a b" a.txt //命令二
a b c
C:\>findstr "a b" a.txt //命令三
a b c
abc
解析
- 命令一:/C:string参数指定的字符串包含空格(空格表示自身字符),/c:"^a b"表示查找以“a b”开头的行
- 命令二:/C:string参数指定的字符串包含空格(空格表示自身字符),/c:"a b"表示查找包含“a b”的行
- 命令三:strings指定的字符串包含空格(空格会被当作多个搜索文本的分隔符), "a b"被空格分为“a”和“b”两段搜索文本,“a”的匹配结果和“b”的匹配结果“除重”后被输出
【/R参数和/L参数】
- /R参数和/L参数用于指定搜索文本的字符串形式,但它们不能同时出现在同一条findstr命令中
- /R参数:把strings(或/C:string指定的字符串)看作正则表达式进行搜索。R是regular(正则表达式)的首字母。
- /L参数:把strings(或/C:string指定的字符串)看作文字(字符串)进行搜索。L是language的首字母。
示例
a.txt的内容如下:
one two three
^one two three four
first second third
^first second third
运行
C:\>findstr /n -r /c:third$ a.txt // 命令一
3:first second third
4:^first second third
C:\>findstr /n /c:third$ a.txt // 命令二
C:\>findstr /n -r /c:third$ /c:fo.r a.txt // 命令三
2:^one two three four
3:first second third
4:^first second third
解析
- 命令一:显式指定-r参数(指定搜索文本是正则表达式),“third$被看作正则表达式。
- 命令二:使用“/c:third$”指定搜索文本,缺省值是/L(指定搜索文本是文字字符串,不是正则表达式), “third$”会被当作文字字符串,在a.txt中找不到。
- 命令三:显式指定-r参数(指定搜索文本是正则表达式),“third$”和“fo.r ”都被看作正则表达式,所以,匹配“third$”的结果和匹配“fo.r ”的结果都会被输出。【注意】在同一条findstr命令中,如果存在多个/C:string参数,则每个/C:string参数指定的搜索文本都会单独在文件中进行匹配,并且把各自的匹配结果输出。
写作不易,如果您觉得对您有用,请 “在下面一圈三连”。