关闭

bat知识点8_findstr

120人阅读 评论(0) 收藏 举报
分类:


1.概述
在文件中寻找字符串。


FINDSTR [/B] [/E] [/L] [/R] [/S] [/I] [/X] [/V] [/N] [/M] [/O] [/P] [/F:file]
        [/C:string] [/G:file] [/D:dir list] [/A:color attributes] [/OFF[LINE]]
        strings [[drive:][path]filename[ ...]]

/B         在一行的开始配对模式。
/E         在一行的结尾配对模式。
/L         按字使用搜索字符串。
/R         将搜索字符串作为正则表达式使用。
/S         在当前目录和所有子目录中搜索匹配文件。
/I         指定搜索不分大小写。
/X         打印完全匹配的行。
/V         只打印不包含匹配的行。
/N         在匹配的每行前打印行数。
/M         如果文件含有匹配项,只打印其文件名。
/O         在每个匹配行前打印字符偏移量。
/P         忽略有不可打印字符的文件。  
/OFF[LINE] 不跳过带有脱机属性集的文件。
/A:attr    指定有十六进位数字的颜色属性。请见 "color /?"
/F:file    从指定文件读文件列表 (/ 代表控制台)。
/C:string  使用指定字符串作为文字搜索字符串。
/G:file    从指定的文件获得搜索字符串。 (/ 代表控制台)。
/D:dir     查找以分号为分隔符的目录列表
strings    要查找的文字。
[drive:][path]filename   指定要查找的文件。


除非参数有 /C 前缀,请使用空格隔开搜索字符串。
例如: 
'FINDSTR "hello there" x.y' 在文件 x.y 中寻找 "hello" 或"there"。
'FINDSTR /C:"hello there" x.y' 文件 x.y  寻找"hello there"。


findstr默认为“正则表达式模式”,加上/r参数也是“正则表达式模式”(换言之,/r参数有点多余)。
加上/l参数后,findstr转换为“普通字符串模式”(其实find就是这种模式、且只有这种模式)。


正则表达式的快速参考:
.        通配符: 任何字符
*        重复: 以前字符或类出现零或零以上次数
^        行位置: 行的开始
$        行位置: 行的终点
[class]  字符类: 任何在字符集中的字符
[^class] 补字符类: 任何不在字符集中的字符
[x-y]    范围: 在指定范围内的任何字符
\x       Escape: 元字符 x 的文字用法
\<xyz    字位置: 字的开始
xyz\>    字位置: 字的结束


2.实例
(1)findstr默认是区分大小写的,要想得到不区分大小写的结果,可以使用/i
a.txt-----------
Hello World
Hello Boy
hello ,good man.
goodbye!


执行1:
findstr "hello" a.txt
结果1:
hello ,good man.


执行2:
findstr "Hello" a.txt
结果2:
Hello World
Hello Boy


执行3:
findstr /i "Hello" a.txt
结果3:
Hello World
Hello Boy
hello ,good man.


(2)显示要查找的字符具体在文本哪一行
执行1:
findstr /n /i "hello" a.txt
结果1:
1:Hello World
2:Hello Boy
3:hello ,good man.


执行2:
find /n "hello" a.txt
结果2:
[3]hello ,good man.


注意:以上输出的冒号(:)和中括号([])


(3)查找包含了指定字符的文本
执行1:
findstr /m /i "hello" *.txt
结果1:
a.txt


注意:由于加上了/m参数,所以只列出包含指定字符的文件名。


(4)查找以指定字符开始或结尾的文本行
b.txt-----------
good hello
你好 hello world
Hello World
Hello Boy
hello ,good man.
goodbye!


执行1:
findstr /b /i "hello" b.txt
结果1:
Hello World
Hello Boy
hello ,good man.


注意:/b参数表示在开头查找。


执行2:
findstr  /i "^hello" b.txt
结果2:
Hello World
Hello Boy
hello ,good man.


注意:这里的正则表达式的元字符^表示“匹配行开始的位置”。


执行3:
findstr /e /i "hello" b.txt
结果3:
good hello


注意:/e参数表示在结尾查找


执行4:
findstr  /i "hello$" b.txt
结果4:
good hello


注意:这里的正则表达式的元字符$表示“匹配行结尾的位置”。


(5)查找完全匹配的行
执行1:
findstr /n /i "^goodbye!$" b.txt
结果1:
1:hello


执行2:
findstr /n /i /x "hello" b.txt
结果2:
1:hello


注意:/x参数表示打印完全匹配的行。


(6)查找不包含指定字符的行
执行1:
findstr /vni "hello" a.txt
结果1:
4:goodbye!


注意:/v参数表示只打印不包含匹配的行。


(7)用文本制定要查找的字符串
string.txt----------
^hello
world


c.txt------------
^hello
hello
hello hello
good hello
你好 hello 
Hello World
Hello Boy
hello ,good man.
goodbye!


执行1:
findstr /ig:string.txt c.txt
结果1:
hello
hello hello
Hello World
Hello Boy
hello ,good man.


从被忽略的“^hello”可以看出,在不加/l参数的前提下,用/g指定的搜索字符串中如果含有“元字符”,
则作为正则表达式使用,而不是作为普通表达式。


(8)只要求显示含有“far”这个单词的行
d.txt----------
far there
farthere
there
far
farm
farmer


执行1:
findstr "\<far\>" d.txt
结果1:
far there
far
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:19968次
    • 积分:775
    • 等级:
    • 排名:千里之外
    • 原创:59篇
    • 转载:9篇
    • 译文:0篇
    • 评论:2条
    文章分类
    最新评论