2023年7月26日发(作者:)
字符串查找cmdfind命令我对findstr是如此的依赖,以⾄于当我向各位讲解find命令的时候,我还得⽼⽼实实地在cmd窗⼝中敲下 find /? 这条命令,然后重重地按下回车键。
find /? 的执⾏结果很快,唰的⼀下,帮助信息全出来了,与findstr命令10多个开关⽐起来,find仅有5个开关,算得上⼩巫见⼤巫了。
find命令的基本格式是这样的:find "要查找的字符串" 要查找的⽂件,在这⾥,"要查找的字符串"这个内容是必不可少的,引号也是必须的。例如:find "bathome" d:,表⽰在D盘根⽬录下的⽂本⽂件中查找含有 bathome 这⼀字符串的所有⾏。
find的结果将会有两种情况:
1、当⽂件中包含要查找的字符串时,将返回这个字符串所在位置的整⾏内容,具体格式为:第⼀⾏是"---------- ×××"(×××表⽰被查找的⽂件名,不包括引号对),第⼆⾏开始才出现包含字符串的整⾏内容;
2、当⽂件中没有出现要查找的字符串时,find的结果仅仅返回"---------- ×××" 这⼀⾏内容(×××表⽰被查找的⽂件名,不包括引号对)。
在查找指定字符串的时候,有的场合需要区分⼤⼩写,有的场合则对⼤⼩写并不在意,如何实现这些需求呢?
很简单,在find的时候,添加或取消/i开关就是了,具体⽤法为:find /i "Abc" 表⽰不区分⼤⼩写,⽂本内容中含有Abc、abc、ABC之类的都算;find "Abc" 则严格区分字符⼤⼩写,只能匹配Abc,⽽不能匹配abc、ABC之类的字符。
有时候,我们的需求并不是为了查找到某个字符串,⽽是要检测哪些⾏不含有特定的字符串,这个时候,可以使⽤开关/v,⽤法为:find /v "Abc" ,它表⽰查找那些不含字符串Abc的⾏(Abc要区分⼤⼩写),如果不区分abc的⼤⼩写,那么,应该写成 find /i /v "Abc" 。
有时候,我们的要求很简单,仅仅只是想统计包含某个字符串的⾏总共有多少,这个时候,应该使⽤开关/c,写成 find /c"abc" 。
如果要在每⾏的⾏⾸显⽰⾏号,怎么办?那就写成 find /n "abc" 吧,它会把的内容都显⽰出来,与原⽂不⼀样的是,在每⾏内容的⾏⾸,都加上了⾏号——注意,它仅仅是在显⽰的时候加上⾏号⽽已,并没有真正改写⽂件的内容。
如果你看到这样的命令:find /i /v /n "Abc" ,请⼀点要先沉住⽓,不要被众多的开关弄得眼花缭乱吓趴下了,仔细对照上⾯的解释,相信你很快就会理解它的功能:在⽂件中,查找不包含字符串Abc的所有⾏,并在⾏⾸标上这些⾏的⾏号,查找的时候,字符串Abc不区分⼤⼩写。
要是使⽤这样的语句:find /c /n "abc" ,会出现什么样的结果呢?答案是:开关/n会被忽略掉,最终结果不会显⽰带⾏号的⾏内容,只会显⽰匹配的总⾏数⽽已。
echo abcdef|find "abc",见过这种写法吗?它的含义是:在字符串abcdef中,检测是否存在字符串abc,也就是说,find⽀持管道符号,把管道符号之前的语句的执⾏结果,作为指定字符串的查找对象,甚⾄,你可以使⽤这样的语句:find "abc"|find "xyz",它表⽰在中查找同时存在字符串abc和字符串xyz的⾏,只要你愿意,你可以继续⽤管道符号把这个find语句连接下去,我们把这个过程称为多重过滤。
在前⾯,我们说过,在 find "要查找的字符串" 要查找的⽂件 这条命令语句中,引号是必须的,要是我们要查找的内容就是双引号本⾝,那⼜该怎么办?
答案很简单:把双引号本⾝先⽤双引号转义,再放到双引号对中,写成 find """" 的格式,如果要查找两个连续的双引号,则应该写成 find """""" 。
如果你想查找两⾏之间的字符块,我劝你趁早放弃这个疯狂的想法,因为,find仅仅针对位于同⼀⾏上的字符串,不能查找跨⾏的字符块。
与findstr命令相⽐,find的功能确实有限得多,仅仅因为不⽀持正则表达式这⼀点,就有不少⼈把它视为鸡肋,从⽽遭到⽆情的抛弃。
然⽽,find并⾮⼀⽆是处,凭借⾃⼰的独门绝技,在与findstr的竞争中,它挣得了⼀席之地。
这些独门绝技是什么呢?(感谢BatCoder的提醒和zqz0012005的补充) 1、统计含指定字符串的总⾏数。find /c "abc" 可以统计中含有字符串abc的总⾏数,⽽findstr则没有直接提供该功能,需要配合for语句才能实现;
2、find可以读取Unicode格式的⽂本,⽽findstr则不⾏;
3、find可以过滤某些特殊字符,⽽findstr则不⾏,⽐如,我们在使⽤fsutil fsinfo drives语句查询磁盘分区的时候,如果想让盘符分⾏显⽰⽽不是显⽰在同⼀⾏上的时候(这在⽤for语句提取盘符的时候很有⽤),find可以⼤显⾝⼿,⽽findstr只能⼲瞪眼了,具体语句为:fsutil fsinfo drives|find /v ""
发布者:admin,转转请注明出处:http://www.yc00.com/web/1690359963a337635.html
评论列表(0条)