c语⾔findstr⽤法,常⽤批处理命令总结之Find和FindStr find 作⽤:从⽂件中收索字符串
格式:find 参数 "字符串" 路径\⽂件名
参数: /V 显⽰所有未包含指定字符串的⾏。
/C 仅显⽰包含字符串的⾏数。
/N 显⽰⾏号。
/I 搜索字符串时忽略⼤⼩写。
/OFF[LINE] 不要跳过具有脱机属性集的⽂件。
当⽂件中包含要查的字符串时,将返回这个字符串所在位置的整⾏内容。默认情况下是区分⼤⼩写的,若想要
不区分⼤⼩写就是⽤参数 /i 有时候,我们的需求并不是为了查到某个字符串,⽽是要检测哪些⾏不含有特定的
字符串,这个时候,可以使⽤开关/v,⽤法为:find /v "Abc" ,它表⽰查那些不含字符串Abc的
⾏(Abc要
区分⼤⼩写),如果不区分abc的⼤⼩写,那么,应该写成 find /i /v "Abc" 。还有⼀点是find ⽀持查通配
符⽂件。如 find "1" *.txt。
findstr 是find的扩展,功能更强⼤
格式:findstr 参数 字符串 路径\⽂件名
参数: /B 在⼀⾏的开始配对模式。 (就是指以字符串开头,begin 这样就⽅便了记忆)
/E 在⼀⾏的结尾配对模式。(就是指以字符串结尾,end 这样就⽅便记忆)
/L 按字使⽤搜索字符串。就是将后⾯的""⾥的当成⼀个字符
/R 将搜索字符串作为⼀般表达式使⽤。
/S 在当前⽬录和所有⼦⽬录中搜索匹配⽂件。
/I 指定搜索不分⼤⼩写。(英⽂:ignore 忽略)
/X 打印完全匹配的⾏。/x 是指完全匹配,就是说整⾏匹配,⽽不是含有关键字.
/V 只打印不包含匹配的⾏。(就是出不包含字符串的)
/N 在匹配的每⾏前打印⾏数。(就是在输出⾏的前⾯加上原⽂件中的⾏数,英⽂:number)
显⽰的结果中冒号(:)是英⽂格式下的,在⽤for提取的时候需要注意!
/M 如果⽂件含有匹配项,只打印其⽂件名。(指定⽂件中输出含有字符串的⽂件名)
/O 在每个匹配⾏前打印字符偏移量。o开关的作⽤是告诉你每⾏第⼀个字符前的位置是该⽂件中的第⼏个字节
计算时别忘了⽂本中不可见的回车符合换⾏符将占两字节(某些⽂本中只占⼀字节)。还有空格键⼀个字符。
肯定听不懂。看例⼦:1.txt⽂件内容: 就三⾏三个c没有空格。输⼊:findstr /o 结果是:
c 0:c
c 3:c
find查命令的使用c 6:c
怎么计算:第⼀⾏的c前没有字符所以是0.第⼆⾏的c前⼀⾏只有⼀个c算⼀个字符由于是第⼆⾏所以算⼀个回车
2个字符就是:1+2=3同理第三个c前有2个字符和2个回车:1*2+2*2=6.。
/P 忽略有不可打印字符的⽂件。(我不清楚,个⼈⽆法解释)
/C:string 使⽤指定字符串作为⽂字搜索字符串。
如:findstr /c:"a b" 1.txt 就会出含"a b"的⾏并输出来(注意a和b中间有空格)
如果不⽤参数/c:findstr "a b" 1.txt 就会输出含有字母 a 或 b 的⾏。
/G:file 从指定的⽂件获得搜索字符串。 (/ 代表控制台)。
如:findstr / 1.txt 就是把1.txt中含有2.txt中任⼀⾏内容的⾏输出来。
上⾯的有点像:@echo off
for /f "delims=" %%a in ('') do (
findstr "%%a" 1.txt
echo.)
pause
(以上是⾃⼰试出来的,不保证正确)
/A:attr 指定有⼗六进位数字的颜⾊属性。请见 "color /?"(使⽤这个可以在dos上⾯搞出不同颜⾊的字,⾃⼰想想)
/F:file 从指定⽂件读⽂件列表 (/ 代表控制台)。
/D:dir 查以分号为分隔符的⽬录列表
/OFF[LINE] 不跳过带有脱机属性集的⽂件。
除⾮参数有 /C 前缀,请使⽤空格隔开搜索字符串。
例如: FINDSTR "hello there" x.y 在⽂件 x.y 中寻 "hello"或"there" 。 FINDSTR /C:"hello there" x.y ⽂
件 x.y 寻"hello there"。
⼀般表达式的快速参考:
. 通配符: 任何字符
* 重复: 以前字符或类别出现零或零以上次数
^ ⾏位置: ⾏的开始
$ ⾏位置: ⾏的终点
[class] 字符类别: 任何在字符集中的字符
[^class] 补字符类别: 任何不在字符集中的字符
[x-y] 范围: 在指定范围内的任何字符
\x Escape: 元字符 x 的⽂字⽤法
\
xyz\> 字位置: 字的结束
是单词锚定 ^是⾏⾸ $是⾏尾
注意的是:别把^,$和\弄混了⼀个是⾏⼀个是字。⾏开始与结束没什么好说的。⽽字的开始和结束就不⼀样了,例如:1.txt⾥两⾏为"abcd" 和 "abcd e"⽤命令findstr "cd\>" 1.txt 两⾏都会出现,只要是连在⼀起(没被空格开)的
并以cd结尾的(不 要求是⾏尾)都满⾜。相当于⽂本中出现英语中以cd结尾的的单词了的⾏都会输出来。
举⼀些例⼦(来⾃⽹络):
1.findstr .
< 或 findstr "." 2.txt 2.findstr .* 2.txt 或 findstr ".*" 2.txt
从⽂件2.txt中查任意字符,不包括空字符或空⾏ 从⽂件2.txt中查任意字符包括空⾏和空字符
==================== ====================
3.findstr "[0-9]" 2.txt
4.findstr "[a-zA-Z]" 2.txt
从⽂件2.txt中查包括数字0-9的字符串或⾏ 从⽂件2.txt中查包括任意字符的字符串或⾏
==================== ====================
5.findstr "[abcezy]" 2.txt
6.findstr "[a-fl-z]" 2.txt
从⽂件2.txt中查包括a b c e z y字母的字符串或⾏ 从⽂件2.txt中查⼩写字符a-f l-z的字符串,但不包含g h I j k这⼏个字母。
==================== ====================
7.findstr "M[abc][hig]Y" 2.txt 8. ^和$符号的应⽤
从⽂件2.txt中可以匹配 MahY , MbiY, MahY等….. ^ 表⽰⾏⾸,"^step"仅匹配 "step hello world"中的第⼀个单词
$ 表⽰⾏尾,"step$"仅匹配 "hello world step"中最后⼀个单词
==================== ====================
9.finstr "[^0-9]" 2.txt
如果是纯数字的字符串或者⾏便过滤掉,例如2323423423 这样的字符串,如果是345hh888这样的形式就不成了。
====================
10.findstr "[^a-z]" 2.txt
同上,如果是纯字母的字符串或者⾏便过滤掉,例如 sdlfjlkjlksjdklfjlskdf这样的字符,如果是sdfksjdkf99999这样的形式,掺杂着数字就不成了
====================
11.*号的作⽤
前⾯已经说过了 ".*"表⽰搜索的条件是任意字符,*号在正则表达式中的作⽤不是任何字符,⽽是表⽰
左侧字符或者表达式的重复次数,*号表⽰重复的次数为零次或者多次。
====================
12.findstr "^[0-9]*$" 2.txt
这个是匹配到的纯数字,例如 234234234234,如果是2133234kkjl234就被过滤掉了。
Findstr "^[a-z]*$" 2.txt
这个是匹配到的纯字母,例如 sdfsdfsdfsdf,如果是213sldjfkljsdlk就被过滤掉了
如 果在搜索条件⾥没有*号,也就是说不重复左侧的搜索条件,也就是[0-9] [a-z]那只能匹配字符串的第⼀个字符也只有这⼀个字符,因为有⾏⾸和⾏尾的限制,"^[0-9]$"第⼀个字符如果是数字就匹配,如果不是就过滤掉, 如果字符串是 9 就匹配,如果是98或者9j之类的就不可以了。
=====================
13. "\"这个表达式的作⽤
这个表⽰精确查⼀个字符串,\表⽰字的结束位置
echo hello world computer|findstr "\"这样的形式
echo hello worldcomputer|findstr "\" 这样的形式就不成了,他要的是 "computer"这个字符串,所以不可以。
echo hello worldcomputer|findstr ".*computer\>"这样就可以匹配了
14.吧1.txt⽂档中超过10个字符的⾏输出到2.txt
@findstr .......... 1.txt&
感觉好像2.txt⾥是少于10个字符的⾏,可是实际却是超过10个字符的⾏,包括10个字符。
find⽐findstr更强的地⽅:
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 ""
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论