[转]FINDSTR正则表达式⼩结
前⾔:最近写了⼀个bat⽤于快速编译swf⾄⽬标⽬录,想利⽤FINDSTR命令通过匹配⽬标⽬录名称,匹配数量⼤概600多个,发现匹配耗时⽐较久,⼤概花费10余秒,因此还是放弃字符匹配,乖乖拼出全称来定位⽬录。感觉bat的运⾏效率是⽐较低的。
稍加搜索,看到⼀些帖⼦也印证了我的想法。bat不适合做太复杂的事。还是分享下FINDSTR命令的⽤法。
FINDSTR正则表达式⼩结正则匹配符号+数字结尾字符串
什么是正则表达式?
百度
findstr的正则表达式是⽤来定义字符串样式的
它的元字符有 .、*、[-]、\、\<、\>、^、$等。
参与运算的对象主要是字母、数字、符号、还有汉字。⽽且该运算具有特殊的规则。
findstr中正则表达式⽤法规则⼩结
●⾏⾸⾏尾规则
如"^rem"、"bat$" 表⽰从⾏⾸匹配rem、从⾏尾匹配bat。
○⾏⾸⾏尾可以是英⽂、数字,还可以是汉字。
●字符集规则
如 [}>]、[abc]、[123]、[a-zA-Z]、[0-9] 表⽰⾏中含有集⾥的任意字符即匹配。
注意,这是集合,不是串。如:"[news]"不能理解为查含有news单词的⾏,只能是定位含有n e w s 4个字母之⼀的⾏。
○需要说明的是,该字符集⾥的集元素可以是字母和数字和⼀般的半⾓字符。
如可以是 : } { , . ] [等,但双引号"不被识别,不能是汉字(汉字不是ASCII码)。
○ "[.*]" 集合中出现的 .*,作为普通字符,没有特殊含意。
○可以组合使⽤,如 [aef1-3x-z]表⽰该字符集是aef和数字1-3和字母x-z等元素的并集.
○ "[ah][1-3]" 表⽰ 2 个字符。
●减法规则
[^abc] 参照帮助信息,本该理解为,匹配不含abc三个字母的⾏。但在xp系统下,却不被正确解释。
○ "[^echo.]" 实际表⽰在查结果中去除为"echo."字符串的⾏。
●通配符和重复符规则
即 .*
○通配符 . 代表任何⼀个字符,包括字母、数字、半⾓符号还有空格,但不包括空⾏。
○重复符 * 代表前⾯字母的重复(重复次数从0到多次)。如 .* [a-z]* [0-9]* [abc]* a*
●单词前缀后缀定位规则
"\<cal" 和="" "ed\="">"
该单词可以是英⽂单词和数字,该单词规则不适⽤于汉字。符号 \ 为转义符。
○ "\<cal"表⽰查⽂本中,英⽂单词以cal为前缀的单词如="" call="" called="" calling="" calculation<br="">○ "ed\>" 查⽂本中,英⽂单词以ed为后缀的单词如 called added changed
○ "\<call\>" ⽤来精确查单词。这⾥⽤来精确查单词call ,那么calling called 就不被匹配。
○ "\<3389\>" 表⽰精确查3389 那么33898、233895就不被匹配。
●关键字规则 "string"
该string可以是英⽂单词、汉字、数字、符号以及上⾯规则的组合.
能够正确解读汉字的只有⾏⾸⾏尾规则,和该规则。
●转义符 \
把表达式中的特殊字符(元字符)转化为普通字符。但不能对双引号" 和⼤于号 > 转义。
常见写法
\.、\*、\\、\[、\]、\-、\\<
如 "\.bat" 把通配符转化为普通的句点,这⾥表⽰匹配".bat"结尾的批处理⽂件名。也可以写成 "[.]bat"
⽰例1:
dir /a /b /s d:\ | findstr /i "\.bat$"
○查⾏尾是".bat"字符串的⾏,并显⽰出来。
\是转义符号,使句点.不再是通配符,⽽是⽂件拓展名中的点。⽤于表达式的关键字查询,在这⾥是列举后缀是bat的批处理⽂件。dir /a /b /s d:\ | findstr /i ".bat$"
○同效于 dir /a /b /s d:\ | findstr /i "bat$"
// 不,有⼀字符之差
findstr /r /i /n Google d:\ | more
○使⽤ Strings 和 [Drive:][Path] FileName [...] 在命令字符串中,所有 findstr 命令⾏选项必须在 Strings 和 [Drive:][Path] FileName [...] 之前。
findstr /r /i /n /x /c:"Google news" d:\bat\ | more
○ /x 打印完全匹配的⾏.查只有“Google news”单词的⾏。
如果是带空格的字符串,要⽤双引号引起来,⽽且要⽤参数/C:"string1 string2"
findstr . 2.txt 或 Findstr "." 2.txt
○从⽂件2.txt中查任意字符,不包括空字符或空⾏。
空字符不是空格。.可以匹配空格
// F:>echo hi pz|findstr "...pz"
// hi pz
// F:>echo hi pz|findstr "....pz"
//
findstr /i /n [g-k] d:\bat\ | more
○表达式中[g-k],可以是字母a-z 或者数字0-9,不能是汉字。⽽且要顺序排列,由⼩到⼤。
⽰例2
下⾯的命令实现提取⽹页的特定⾏
Findstr /r /i /n %string% %htmfile%
%htmfile% 表⽰⽹页⽂件(⽂本⽂件)。
%string% 表⽰关键字或字符串表达式。
"
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论