前言:最近写了一个bat用于快速编译swf至目标目录,想利用FINDSTR命令通过匹配目标目录名称,匹配数量大概600多个,发现匹配耗时比较久,大概花费10余秒,因此还是放弃字符匹配,乖乖拼出全称来定位目录。感觉bat的运行效率是比较低的。
稍加搜索,看到一些帖子也印证了我的想法。bat不适合做太复杂的事。还是分享下FINDSTR命令的用法。
 
FINDSTR正则表达式小结
 
什么是正则表达式?
百度 http://baike.baidu.com/view/94238.htm?fr=ala0_1#4_5
 
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:\bat\wenben.txt | more
○ 使用 Strings 和 [Drive:][Path] FileName [...] 在命令字符串中,所有 findstr 命令行选项必须在 Strings 和 [Drive:][Path] FileName [...] 之前。
findstr /r /i /n /x /c:"Google news" d:\bat\htm\meinv.txt | 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\htm\meinv.txt | more
○ 表达式中[g-k],可以是字母a-z 或者数字0-9,不能是汉字。而且要顺序排列,由小到大。
 

 
示例2
下面的命令实现提取网页的特定行
Findstr /r /i /n %string% %htmfile%
%htmfile% 表示网页文件(文本文件)。
%string% 表示 关键字或字符串表达式。
"

[转]FINDSTR正则表达式小结的更多相关文章

  1. 批处理FINDSTR正则表达式用法实例分析

    1.findstr . 2.txt 或 Findstr "." 2.txt 从文件2.txt中查找任意字符,不包括空字符或空行 2.findstr .* 2.txt 或 finds ...

  2. iOS 正则表达式小结

    #pragma mark - 正则第一种表示方式-利用NSPredicate(谓词)匹配//    NSString *email = @"15078357696@163.com" ...

  3. 正则表达式小结(Regular Expressions)

    (原创文章,谢绝转载~) 日常开发中,常用正则表达式方便的进行匹配.筛选工作.正则的常用内容有: 一般情况下原则:从左至右,越多越好(贪婪) 字符:转义:\ ,如 \*,\d (数字)等 选择,cas ...

  4. .net常用正则表达式小结

    好久没有些博客了,今天就随便写点工作当中遇到的一些问题.正则表达式估计大家在开发的过程中都会遇到,下面是我平时用到的以及自己整理的一些常用的正则表达式,供大家学习和参考. "^\d+$&qu ...

  5. js中的正则表达式小结1

    正则表达式总结 创建正则对象:var regex=new RegExp(/\d/); 一般都用直接量,写法更简洁:var regex=/\d/; test()方法用来验证字符串是否符合规则,返回tru ...

  6. 正则表达式小结,数据预处理中常用的shell命令

    数据预处理中,这部分命令非常有用. 不需要编写代码,直接通过shell脚本通常就能修改文件格式.有时候sed和awk联合几乎能实现所有功能. 管道命令 | 重定向命令>,2>,>&g ...

  7. jQuery中校验时间格式的正则表达式小结

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/ ...

  8. vim正则表达式小结

    http://note.youdao.com/noteshare?id=7ca2ac5d2f37fcb0e7a2a9c811c6e568

  9. 第11.27节 Python正则小结:正则静,静则明,明则虚,虚则无为而无不为也

    正则表达式的章节到此就结束了,老猿现在觉得对我们这些身具程序猿基因特色的人来说,正则表达式应该是蛮可口的开胃小菜. 在写标题时,本来想写"正则表达式小结",后来想了想,百度了一下, ...

随机推荐

  1. ios 和安卓常用图标、启动图 尺寸

    ---------------------------------------------ios---------------------------------------------------- ...

  2. Reverse Core 第一部分 代码逆向技术基础

    @date: 2016/10/14 <逆向工程核心原理>笔记 记录书中较重要的知识,方便回顾 ps. 因有一些逆向基础,所以我本来就比较熟悉的知识并未详细记录 第一章 关于逆向工程 目标, ...

  3. SqlPlus中退格键和方向键的设置

    参见:http://www.cnblogs.com/wjx515/p/3717986.html   http://blog.csdn.net/jacky0922/article/details/765 ...

  4. LocalDB连接失败

    最近项目尝试放弃sqlexpress2005使用LocalDb2014,遇到问题: LocalDB安装成功,能正常添加实例,但同一个winform程序 在不同的win7电脑上有的能连上,有的怎么也连接 ...

  5. JS中的if和else的用法以及基础语法

    正常里的变量方式.var a = 10; 针对整数.var b = 3.14; 针对的小数点.var c = "你好":双引号或者单引号引起来的是定义字符串. 一.类型转换(强制转 ...

  6. OutofMemory之PermGen介绍

    可参考:https://my.oschina.net/benhaile/blog/214159.

  7. centos7.0 下安装jdk1.8

    centos7.0这里安装jdk1.8采用yum安装方式,非常简单. 1.查看yum库中jdk的版本 [root@localhost ~]# yum search java|grep jdk 2.选择 ...

  8. iOS 版本号大小比较

    NSString *num1 = @"5.2.0";    NSString *num2 = @"5.3.0"; if ([num1 compare:num2 ...

  9. asp.net Application、 Session、Cookie、ViewState、Cache、Hidden 的区别

    这些对象都是用来保存信息的,包括用户信息,传递值的信息,全局信息等等.他们之间的区别: 1.Application对象 Application用于保存所有用户的公共的数据信息,如果使用Applicat ...

  10. Particle System(粒子系统)

    粒子系统应用:Unity的粒子系统可以制作烟雾,气流,火焰和各种大气效果.   粒子系统模块介绍:         大部分的属性可以通过曲线控制(见曲线编辑器),颜色属性可以被定义了颜色动画的渐变器控 ...