dos→findstr正则表达式
findstr /?
帮助文档,正则表达式 片断
. 任意字符
* 表示重复次数为任意。注意,不是通配任意个数字符
[] 集合中任意一个
[^]排除集合中任意一个 // 注:os-xp 情况不同。
- 区间
^ 行首
$ 行尾
\<... 词首
...\> 词尾
示例
1.findstr . file.txt 或 findstr "." file.txt
从文件file.txt中查找任意字符,不包括空字符或空行
2.findstr .* file.txt 或 findstr ".*" file.txt
任意字符,包括空行和空字符
3.findstr "[set]" file.txt
集[set]中任意字符
集还可以表示为区间
[0-9]、[a-zA-Z]、[a-fl-z] 等
4.findstr "M[abc][hig]Y" file.txt
匹配 MahY , MbiY, MahY等
5. ^和$符号的应用
^ 表示行首,"^step"仅匹配 "step hello world"中的第一个单词
$ 表示行尾,"step$"仅匹配 "hello world step"中最后一个单词
9.finstr "[^0-9]" file.txt
查找一非数字字符,如果是纯数字的字符串或者行便过滤掉。
例如 2323423423 不匹配,345hh888 匹配。
10.findstr "[^a-z]" file.txt
同上
例如 sdlfjlkjlksjdklfjlskdf 不匹配,sdfksjdkf99999 匹配
注:附录 os-xp findstr测试
11.*号的作用
前面已经说过了 ".*"表示搜索的条件是任意字符,*号在findstr正则表达式中的作用不是任何字符,而是表示左侧字符或者表达式的重复次数为零次或者多次。
12.findstr "^[0-9]*$" file.txt
这个是匹配找到的纯数字,例如 234234234234,如果是2133234kkjl234就被过滤掉了。
Findstr "^[a-z]*$" file.txt
这个是匹配找到的纯字母,例如 sdfsdfsdfsdf,如果是213sldjfkljsdlk就被过滤掉了
如果在搜索条件里没有*号,也就是说不重复左侧的搜索条件,也就是[0-9] [a-z]那只能匹配字符串的第一个字符也只有这一个字符,因为有行首和行尾的限制,"^[0-9]$"第一个字符如果是数字就匹配,如果不是就过滤掉,如果字符串是 9 就匹配,如果是98或者9j之类的就不可以了。
13. "\<…\>"这个表达式的作用
这个表示精确查找一个字符串,\表示字的结束位置
echo hello world computer|findstr "\"
精确查找单词,成功
echo hello worldcomputer|findstr "\"
精确查找单词,失败
echo hello worldcomputer|findstr ".*computer\>"
词尾匹配,成功
附录
os-xp findstr测试
C:\>echo ba | findstr "[^ab]"
ba
C:\>echo ba | findstr "[^ab]"
ba
C:\>echo ba| findstr "[^ab]"
结论:
XP上findstr的正则表达式 [^abc] 表示排除整行内容(含空格)为abc的行。
注意,这里不是指 “行中不包含集合[abc]中任意字符”。
阅读(1517) | 评论(0) | 转发(0) |