曲径通幽论坛

 找回密码
 立即注册
搜索
查看: 4404|回复: 0
打印 上一主题 下一主题

[命令] findstr 多个用法实例(含正则表达式)

[复制链接]

716

主题

734

帖子

2946

积分

超级版主

Rank: 9Rank: 9Rank: 9

积分
2946
跳转到指定楼层
楼主
发表于 2014-5-21 10:25:33 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
findstr 用来在文件中查找字符串,下面列举出多个应用实例。
测试文本内容为:
C:\Users\beyes\Desktop>type test.txt
abcdef

1t1t1
2ab2
333



d44e
aaaa
bb345bb
88888

1. /b (b 是 begin 的意思)从一行的开头匹配,使用该选项,相当于正则表达式里的 ^ 符号,示例:

C:\Users\beyes\Desktop>findstr /b "2"  test.txt
2ab2

C:\Users\beyes\Desktop>findstr /b "[a-z]"  test.txt
abcdef
d44e
aaaa
bb345bb

2. /e (e 是 end 的意思)从一行的末尾开始匹配,使用该选项,相当于正则表达式里的 $ 符号,示例:
C:\Users\beyes\Desktop>findstr /b "[0-9]"  test.txt
1t1t1
2ab2
333
88888

3. /L 逐字搜索,示例:
C:\Users\beyes\Desktop>findstr /l "5"  test.txt
bb345bb

C:\Users\beyes\Desktop>findstr /l "8"  test.txt
88888

如上第一个例子所示,/l 后给出的的 "5",这说明,将全文搜索含有 5 的行。

4. /R 使用搜索串作为正则表达式,findstr 将所有元字符作为正则表达式,该选项不能和 /L 选项一起使用,否则会造成解析上的冲突,若一起用了,也会收到提示:仅指定 /L 或 /R。示例:
C:\Users\beyes\Desktop>findstr /r "e$"  test.txt
d44e

上面的 $ 符号被当成是正则表达式里的表示行的结尾符;如果用 /l 选项,那么该 $ 符号为一般的普通字符。


5. /S 在当前目录和所有子目录中搜索匹配文件。

6.  /I 指定搜索不分大小写。
7.  /X 打印完全匹配的行,示例:
C:\Users\beyes\Desktop>findstr /x "88888" test.txt88888

一个完全匹配行,还要包含一个换行,像最后一行,如果在保存文件时,没有换行符,那么不会被匹配。

8.  /V 只打印不包含匹配的行。

9.  /N 在匹配的每行前打印行数,示例:
C:\Users\beyes\Desktop>findstr /N "^[a-z]*$" test.txt
1:
2:abcdef
3:
7:
8:
9:
11:aaaa
14:

虽然本意是只要打印含有字符的行的行号,但空行也会被统计出来。如果不想打印空行,那么可以使用 findstr  /V "^$" test.txt ,这里 ^$ 匹配了空行,/V 参数表示不打印。如下执行命令:
C:\Users\beyes\Desktop>findstr  /V "^$" test.txt | findstr /X ^[a-z].*$
abcdef
d44e
aaaa
bb345bb

这里先将空行滤除,然后将结果从管道输入到下一个 findstr 命令,并要求只打印出首个字符为字母的行(^[a-z].*$),这里 /X 选项不能少,不然它也会把不匹配的行也打印出来。


10.  /M 如果文件含有匹配项,只打印其文件名。

11. /O 在每个匹配行前打印字符偏移量。
C:\Users\beyes\Desktop>findstr /O "ab" test.txt
2:abcdef
19:2ab2

这个偏移量是匹配行前面有多少个字符,包括换行符(2个 \r\n)

12. /P 忽略有不可打印字符的文件。

13. /C:string  使用指定字符串作为文字搜索字符串。

14. \<xyz    字位置: 字的开始 和  xyz\>    字位置: 字的结束。示例:
C:\Users\beyes\Desktop>echo hello bat world |findstr "\<bat\>"
hello bat world

C:\Users\beyes\Desktop>echo hello batworld |findstr "\<bat\>"

下面第二条语句找不到任何结果,因为上面两符号是界定一个字(单词),而该语句中,bat 是 batworld 这个单词的一部分。

更多选项见帮助手册。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|曲径通幽 ( 琼ICP备11001422号-1|公安备案:46900502000207 )

GMT+8, 2025-6-17 19:49 , Processed in 0.082632 second(s), 22 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表