本帖最后由 yhcfsr 于 2018-6-7 12:57 编辑
findstr可以完全替代find吗?
list.txt- 张三
- 李四
- 张三 李四
- D:\test\测试用PPT.pptx
- D:\test\test测试用PPT.pptx
复制代码- findstr支持正则,可同时查找多个关键,比如
- 在list.txt中查找包含"张三"或"李四"的行
- findstr /r "张三 李四" list.txt
- 测试结果:
- 张三
- 李四
- 张三 李四
复制代码
- findstr /c:"张三 李四" list.txt
- 结果:
- 张三 李四
- find "张三 李四"<list.txt 也能得到相同结果
复制代码- findstr /r /c:"D:\test\测试用PPT.pptx" list.txt
- findstr /l /c:"D:\test\测试用PPT.pptx" list.txt
- 结果:空
- findstr /r /c:"D:\test\test测试用PPT.pptx" list.txt
- 结果:空
- findstr /l /c:"D:\test\test测试用PPT.pptx" list.txt
- 结果:D:\test\test测试用PPT.pptx
- 不确定的结论:
- /R参数是正则表达,此时\是元字符的转义符,所以表达式中根本不存在\这个符号,自然匹配不到结果
- /L参数,去正则,让字符转为普通字符.理论上应该可以找到匹配结果;意外的是,如果\与汉字相邻,匹配失败;只有\与非汉字字符相邻,才能匹配成功.真是莫名其妙.
- 如果将匹配表达式的中\换成\\,那无论是findstr /l 或findstr /r ,无论表达式中\有没有与汉字相邻都没有影响.
- 在正则中\\是表示普通字符\,前面的\是转义.由此可知,/L参数去正则并不完全.
复制代码
不管怎么说,可以得出一个结论:
如果希望用正则匹配表达式,就用findstr /r;
如果不希望用正则,按普通字符串匹配,就用 find. |