Board logo

标题: [文本处理] 【已解决】批处理findstr显示彩色字符的详细讲解 [打印本页]

作者: lovebatworld    时间: 2009-3-15 06:18     标题: 【已解决】批处理findstr显示彩色字符的详细讲解

找了一晚上资料没弄懂这个命令到底是怎么回事,光知道是干什么的,但不知道原理:
比如我建立一个文件为haha1,文件中内容为1234,又建立haha2,文件内容5678,然后写了bat文件:
@echo off
findstr /a:e .* ha*
pause>nul

运行结果是haha1(黄色字体)1234haha2(黄色字体)5678

我不明白的是,这是为什么,findstr的作用不是从文件中找匹配的字符串吗?按照这个理解,应该从文件ha*中,即从所有以ha打头的文件中提取含有.*字符的行,为什么会有带了颜色的文件名字出现呢?

另外一个问题是专门针对.*这个通配符的用法,看cmd中帮助很不理解,*代表前字符出现0或0以上的次数,不明白什么意思,我发现如果在某文件中寻找匹配项的时候,把匹配项写成.*和1*,2*......9*,或者a*,b*....z*都一样,都是提取所有的字符。请知道的人详细解释一下findstr的用法,万分感谢!【】

[ 本帖最后由 lovebatworld 于 2009-3-15 13:18 编辑 ]
作者: defanive    时间: 2009-3-15 09:08

话说这个命令我也不太懂,呼叫Batcher
作者: defanive    时间: 2009-3-15 09:13

貌似在Vista下不标色
作者: lovebatworld    时间: 2009-3-15 10:53

昨晚研究了一个通宵,未果,发帖求助,睡觉,梦中灵光一闪,居然被我想通了第一个问题:为什么会有彩色字符出现。因为我findstr最后文件名处使用了通配符,意思是在所有文件夹中寻找匹配的字符,那么由于通配符的作用,findstr必须告诉用户,最终找到的匹配的字符分别来自于具体的哪个文件,所以才出现了一下这种格式:haha1:1234  haha2:5678,(有冒号,昨晚漏写了),并且允许将文件名字以指定醒目的颜色标注出来,也就是说利用了findstr的这种准确描述字符出处的输出,来实现了字符的彩色输出。好棒的命令!至于后面那个问题,等达人来讲解,谢谢!
作者: Batcher    时间: 2009-3-15 11:23

看cmd中帮助很不理解,*代表前字符出现0或0以上的次数,不明白什么意思,我发现如果在某文件中寻找匹配项的时候,把匹配项写成.*和1*,2*......9*,或者a*,b*....z*都一样,都是提取所有的字符。

根据帮助文档的说法,1*就表示1出现0次或者1次或者2次或者任意多次。
假设文本内容如下:
abc
123
131

findstr是以行模式进行逐行匹配的。
第一行可以认为1出现了0次,匹配成功;
第二行可以认为1出现了1次,匹配成功;
第一行可以认为1出现了2次,匹配成功;
...

a*,b*....z*同理。
作者: lovebatworld    时间: 2009-3-15 11:51

太感谢batcher了。我刚用你的讲解试验了一下,终于明白了,比如我建一个文件test.txt,里面写三行字符串:
abcdef
回车
ghi
然后通过下面不同的命令对应不同的结果,更好的看出规律:
findstr  . test.txt  结果:
abcdef
ghi
解释:只有一个.  输出所有字符,不包括换行
-----------------------------------------------
findstr  .* test.txt  结果:
abcdef

ghi
解释:.* 输出所有字符,包括换行
-----------------------------------------------
findstr  1* test.txt  结果同上,  同理,这个1换成任意数字或字母,结果都一样。
------------------------------------------------
findstr  a1* test.txt  结果:
abcdef
解释:找出出现一个a,以及a后面出现过0次或者任意次1的字符行,所以只有第一行符合条件。
--------------------------------------------------
findstr  ab1* test.txt  结果:
abcdef
解释:找出出现一个“ab”字符串,以及b后面出现过0次或者任意次1的字符行,所以只有第一行符合条件。同理如果你写成ab1*,bc1*,cd1*都一样。
------------------------------------------------
findstr  ac* test.txt  结果:
abcdef
解释:道理同a1*的情况,找出出现一个a,以及a后面出现过0次或者任意次c的字符行,所以只有第一行符合条件。。同理如果你写成ab*,ad*,ae*都一样。
------------------------------------------------------
findstr  ac1* test.txt  结果:

解释:找出出现一个"ac"字符串,以及c后面出现过0次或者任意次1的字符,由于这3行均没有出现ac连在一起的情况,所以均不符合。
-----------------------------------------------------

看了以上的几种情况,我相信大家基本可以举一反三列出更多的情况并加以理解了吧。

谢谢batcher!

[ 本帖最后由 lovebatworld 于 2009-3-15 12:00 编辑 ]
作者: cc5511    时间: 2020-8-28 23:46

学习了 我也在研究怎么显示不同颜色的字符 原来是这个:findstr




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