Board logo

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

作者: dizimotong    时间: 2015-7-29 20:56     标题: 批处理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就可以很好地解决这个问题,但我想看看不借助第三方程序是否可以解决该问题。
作者: CrLf    时间: 2015-7-29 21:02

findstr 的正则是简化版的,非常不正规,这里的 A-Z 好像是按照区域设置的规则来排序,实际上相当于 AbBcCdD....xXyYzZ 这个序列
作者: CrLf    时间: 2015-7-29 21:04

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

作者: dizimotong    时间: 2015-7-29 21:13

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

回复 4# dizimotong


不是系统原因,是程序猿的问题
作为自带命令行工具中唯一一个支持正则的命令,如此不争气简直是 bat 莫大的悲哀
作者: Batcher    时间: 2015-7-29 23:04

回复 4# dizimotong


    友情提示,Linux系统里面的awk命令受到locale的影响也可能存在同样的问题。




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2