找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 25283|回复: 5

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

[复制链接]
发表于 2015-7-29 20:56:17 | 显示全部楼层 |阅读模式
本帖最后由 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就可以很好地解决这个问题,但我想看看不借助第三方程序是否可以解决该问题。
发表于 2015-7-29 21:02:51 | 显示全部楼层
findstr 的正则是简化版的,非常不正规,这里的 A-Z 好像是按照区域设置的规则来排序,实际上相当于 AbBcCdD....xXyYzZ 这个序列
发表于 2015-7-29 21:04:19 | 显示全部楼层
解决办法是把 [A-Z] 写成这样:
  1. [ABCDEFGHKJLMNOPQRSTUVWXYZ]
复制代码
 楼主| 发表于 2015-7-29 21:13:05 | 显示全部楼层
回复 3# CrLf
之前使用linux系统,其正则表达式就比较正规,在dos使用时的确有些缺陷吧,对于你所说的解决方法,我之前也想过,只是觉得这样写有些不方便,貌似也没有其他更好的解决方法了,好的,还是要谢谢你!
发表于 2015-7-29 22:23:07 | 显示全部楼层
回复 4# dizimotong


不是系统原因,是程序猿的问题
作为自带命令行工具中唯一一个支持正则的命令,如此不争气简直是 bat 莫大的悲哀
发表于 2015-7-29 23:04:28 | 显示全部楼层
回复 4# dizimotong


    友情提示,Linux系统里面的awk命令受到locale的影响也可能存在同样的问题。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-19 01:16 , Processed in 0.017291 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表