[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文本处理] 批处理findstr命令查找/匹配大写字母的一个缺陷

本帖最后由 pcl_test 于 2017-6-13 20:52 编辑

最近在使用findstr这个命令时,发现了一个缺陷,不知道大家会不会,所以拿出来跟大家讨论一下。
先举个例子吧:
  1. echo abc|findstr [A-Z]
复制代码
其实我这条命令是想要搜索echo命令输出后的大写字母,但结果并不是我想要的(我的预想是最终没有结果输出,但实际不是这样),好像是字符类[A-Z]或者[a-z]不区分大小写,大家也可以用findstr在文本中尝试搜索一下,看看是不是这样。
所以,我的问题来了:
1、大家使用该命令的结果是否一样(我觉得应该一样了,但是为了严谨一些,所以问一下)
2、为什么会这样,我个人觉得是编写这个命令的人员没有考虑这一点吧,貌似许多dos下的程序命令对于大小写都不太敏感(linux却恰恰相反),这是我个人看法,但我想看看其他专业人士的看法。
3、如何解决这种情况,最好不要用使用第三方程序,因为我知道使用grep就可以很好地解决这个问题,但我想看看不借助第三方程序是否可以解决该问题。

findstr 的正则是简化版的,非常不正规,这里的 A-Z 好像是按照区域设置的规则来排序,实际上相当于 AbBcCdD....xXyYzZ 这个序列

TOP

解决办法是把 [A-Z] 写成这样:
  1. [ABCDEFGHKJLMNOPQRSTUVWXYZ]
复制代码

TOP

回复 3# CrLf
之前使用linux系统,其正则表达式就比较正规,在dos使用时的确有些缺陷吧,对于你所说的解决方法,我之前也想过,只是觉得这样写有些不方便,貌似也没有其他更好的解决方法了,好的,还是要谢谢你!

TOP

回复 4# dizimotong


不是系统原因,是程序猿的问题
作为自带命令行工具中唯一一个支持正则的命令,如此不争气简直是 bat 莫大的悲哀

TOP

回复 4# dizimotong


    友情提示,Linux系统里面的awk命令受到locale的影响也可能存在同样的问题。
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

返回列表