批处理入门手册之批处理常用DOS命令篇(find findstr)
1.4学习find findstr命令
学习要点:
1.字符串查找:find
2.字符串查找增强:findstr
一.字符串查找:find
在文件中搜索字符串。
FIND[/V][/C][/N][/I][/OFF[LINE]]"string"[[drive:][path]filename[...]]
/V 显示所有未包含指定字符串的行。
/C 仅显示包含字符串的行数。
/N 显示行号。
/I 搜索字符串时忽略大小写。
/OFF[LINE]不要跳过具有脱机属性集的文件。
"string" 指定要搜索的文字串,
[drive:][path]filename 指定要搜索的文件。
基本格式:find"要查找的字符串"要查找的文件(不在当前目录则需要给出完整路径)
例1
find"abc"d:\abc.txt
在abc.txt中查找字符串abc的行。
/I搜索字符串时忽略大小写。
例2
find/i"abc"d:\abc.txt
参数/i代表的是“Ignore”(忽略),也就是忽略大小写。通过/I参数可以不区分要查找的字符串“abc”的大小写。
/N显示行号。
例3
find/n"abc"d:\abc.txt
参数/n代表英语单词“Number”(号码).。通过/n参数我们可以查找到字符串"abc"所在的行号。
/C仅显示包含字符串的行数。
例4
find/c"abc"d:\abc.txt
参数/c是英语单词“Count”(计数)的缩写。通过/c参数我们可以统计包含"abc"字符串的行数。
/V 显示所有未包含指定字符串的行。
例5
find/v"abc"d:\abc.txt
这个参数用于找出文件中不包含指定字符串的行。在这里表示查找不包含"abc"字符串的行。
注意:find命令中要查找的字符串一字要用双引号""括起来。
二.字符串查找增强:findstr
在文件中寻找字符串。
FINDSTR[/B][/E][/L][/R][/S][/I][/X][/V][/N][/M][/O][/F:file]
[/C:string][/G:file][/D:dirlist][/A:colorattributes][/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"hellothere"x.y'在文件x.y中寻找"hello"或
"there"。 'FINDSTR/C:"hellothere"x.y'在文件x.y寻找"hellothere"。
1.基本格式:findstr"strings"[drive:][path]filename
Strings 是要查找的内容。
[rive:][path]filename 指定要查找的文件,路径可缺省,缺省情况下为当前目录。
例1
findstr"icq"123.txt
在123.txt中查找包含有“icq”这三个字符串的行。
/I 指定搜索不分大小写。
例2
findstr/i"MSN"123.txt
在123.txt中查找包含有“MSN”这三个字符的行,且不区分大小写。
★/R将搜索字符串作为正则表达式使用。参数/R强调以正则表达式规则来解读字符串。R-Right右即为正。我们
都说右手是正手,因此引申为右为正,左为反。
例3
findstr/r"icqmsn"123.txt
在123.txt中查找包含有“icq”或“msn”的行,查找的多个字符串间用空格隔格开。
/S在当前目录和所有子目录中搜索。
例4
findstr/s/i"MSN"*.txt
在当前目录和所有子目录中的txt文件中搜索字符串"MSN"(不区分字母大小写)。
/C:string使用指定字符串作为文字搜索字符串。
例5
findstr/c:"icqmsn"123.txt
在123.txt中查找包含有“icqmsn”这几个字符的行。注意,这里“icqmsn”是一整体的。
此参数多用于查找含有空格的字符串。
★在使用findstr"我你他"test.txt的时候,并不能查找到内容,但是,加上开关/i或者/r之后就正确无误
了,可能是在查找多个纯中文字符串的时候的一个bug吧;单个的纯中文字符串没有任何问题。
2.findstr命令中正则表达式的用法规则
一般表达式的快速参考:
. 通配符:任何字符
* 重复:以前字符或类别出现零或零以上次数
^ 行位置:行的开始
$ 行位置:行的终点
[class] 字符类别:任何在字符集中的字符
[^class]补字符类别:任何不在字符集中的字符
[x-y] 范围:在指定范围内的任何字符
\x Escape:元字符x的文字用法
\<xyz 字位置:字的开始
xyz\> 字位置:字的结束
●通配符和重复符规则,即.和*
通配符,即一个句点,代表任何一个字符,而且只能是一个,包括字母、数字、半角符号还有空格。
重复符,即型号*代表前面字母的出现次数(出现次数从0到多次,0表示没有)。
findstr.123.txt或findstr"."123.txt
在文件123.txt中查找任意字符,不包括空行。
例6
findstr.*2.txt或findstr".*"2.txt
在文件123.txt中查找任意字符,包括空行。
例7
findstrac*123.txt
在文件123.txt中查找出现一个“a”字符串,以及a后面出现过0次或者任意次c的字符行。
如:
a
ac
acc
addc
等都匹配。
例8
findstrak5*123.txt
在文件123.txt中查找出现一个“ak”字符串,以及ak后面出现过0次或者任意次5的字符行。如:
ak
ak5
akbbb
ak125
ak555
等都匹配。
●行首、行尾符规则,即^和$
例9
findstr"^step"123.txt
在文件123.txt中查找行首为step字符串的行。
如:
stepkdka
step456
这两行都匹配的。
例10
findstr"step$"123.txt
在文件123.txt中查找行尾为step字符串的行。
如:
123dstep
123step
这两行也匹配的。
例11
findstr"^step$"123.txt
在文件123.txt中查找行首为step,且行尾也为step的行,即step独自一行。
●字符集规则,即[class]
①表示含有集里的任意一个字符的即匹配。
②该字符集里的元素可以是字母和数字和一般的半角字符,如:}{,.][等,但双引号"不被识别。不能是汉字,汉字
不被正确解释(汉字不是ASCII码)。
如果在字符集内插入通配符和重复符号,即"[.*]"将会把.和*视为普通字符,没有通配和重复的含义。
例12
findstr"[0-9]"123.txt
在文件123.txt中查找数字0-9的任意之一的行。
如:
4kkb
1lkkacc
这两行都匹配。
例13
findstr"[a-zA-Z]"123.txt
在文件123.txt中查找包括任意字母行。
例14
findstr"[abcezy]"2.txt
在文件123.txt中查找包括abcezy其中任意一字母的行。
例15
findstr"[a-fl-z]"2.txt
在文件123.txt中查找小写字符a到f或l到z的任意一字母的行,但不包含ghIjk这几个字母。
例16
findstr"M[abc][123]Y"2.txt
在文件123.txt中查找可以匹配Ma1Y,Mb1Y,Mc1Y;Ma2Y,Mb2Y,Mc2Y;Ma3Y,Mb3Y,Mc3Y的行。
●减法规则,即[^class]
例17
findstr"[^0-9]"123.txt
如果是纯数字的行便过滤掉,例如2323423423这样的字符串被过滤,345hh888这样的形式则过滤不了。
注意,纯数字的行不能有空格,不论行首行尾或者是行中都不能有空格,否则过滤失败!
例18
findstr"[^a-z]"123.txt
如果是纯字母的行便过滤掉,例如sdlfjlkjlksjdklfjlskdf这样的字符将被过滤,如果是sdfksjdkf99999这样的形
式则过滤不了。
注意,纯字母的行不能有空格,不论行首行尾或者是行中都不能有空格,否则过滤失败!
例19
findstr"[^add]"123.txt
过滤仅含有由add三个字母组成的纯字母字符串的行。
如:
a
ad
ddaadd
dd
这些行都会被过滤。
注意,仅含有由add三个字母组成的纯字母字符串的行不能有空格,不论行首行尾或者是行中都不能有空格,否则
过滤失败!
例20
findstr"[^echo]"123.txt
过滤仅含有由e c h o四个字母组成的纯字母字符串的行。
如:
e
c
ec
cho
chooo
这些行都会被过滤。
●单词前缀后缀定位规则,即\<xyz和xyz\>
该xyz可以是英文单词或数字,但不适用于汉字。符号\理解为转义符,化解小于号和大于号的重定向命令含义。
该规则是匹配类似单个英文单词的。
例21
findstr"\<echo"123.txt
所有含有以echo为前缀的字符串的行,都匹配。
如:
echo:kkkaadd
jjkkecho
这两行都匹配。
(思考:为什么:echo也匹配?)
例22
findstr"echo\>"123.txt
所有含有以echo为后缀的字符串的行,都匹配。
如:
qqbbecho这一行也匹配。
(思考:为什么kkkkecho:也匹配?)
例23
findstr"\<end\>123.txt
这里是用来精确查找单词。查找单词end的行,
注意:
ended
cdkend
bcd-end-jjkk
这类词都不匹配。
(思考:为什么endecho和end也匹配?因为\<xyz\>格式要查找的是单个英文单词。)
●转义符\
把表达式中的特殊字符(元字符)转化为普通字符。常见写法:
\.
\*
\\
\[
\]??
\-
例24
findstr"\.abc"123.txt
在文件123.txt中查找可以匹配“.abc”字符串的行,这里\。是把。给转义了。
例25
findstr"1\\"123.txt或findstr"1\\\\"123.txt
在文件123.txt中查找可以匹配“1\”字符串的行,这里\\是把\给转义了。
★要查找的字符串含有\时,可以用\\把\给转义;或者把\变成\\\\。如果目标字符串的\后面还有内容,则搜索字符
串\除了要变成\\(本身的转义要求),还可以在它后面再加一个字符,如\\.