当前位置: 首页 > 图文教程 > 脚本技术 > DOS/BAT > 批处理 正则表达式(findstr) 整理

DOS/BAT
每天按时 重启服务器 的批处理
Netsh 命令备份和恢复网络设置
批处理 Set 命令详解 让你理解set命令
cd命令 目录跳转
cmd tree命令 以树形格式罗列文件
dos 内容重定向符 >和>>
cmd if条件 条件判断
cmd goto命令 流程跳转
cmd copy命令 文件复制
cmd del命令 文件删除
cmd ren命令 重命名文件(夹)
cmd md命令 创建文件夹
cmd rd命令 删除文件夹
cmd move命令 移动文件(夹)
字符串查找 cmd find命令
常用的批处理实用技巧
批处理 添加隐藏用户代码
服务器 安全设置 批处理
WIN2003 服务器安全配置批处理文件
批处理 实现定时关机、注销、重启、锁定等功能

DOS/BAT 中的 批处理 正则表达式(findstr) 整理


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-09-11   浏览: 203 ::
收藏到网摘: n/a

语法
findstr [/b] [/e] [/l] [/r] [/s] [/i] [/x] [/v] [/n] [/m] [/o] [/p] [/offline] [/g:File] [/f:File] [/c:String] [/d:DirList] [/a:ColorAttribute] [Strings] [[Drive:][Path] FileName [...]]
参数
/b
如果位于行的开头则匹配模式。
/e
如果位于行的末尾则匹配模式。
/l
逐字地搜索字符串。
/r
使用搜索串作为正则表达式。Findstr 将所有元字符解释为正则表达式,除非使用了 /l。
/s
在当前目录和所有子目录中搜索匹配的文件。
/i
指定搜索不区分大小写。
/x
打印完全匹配的行。
/v
仅打印不包含匹配的行。
/n
在每个匹配的行之前打印行号。
/m
如果文件包含匹配项,则仅打印该文件名。
/o
在每个匹配行之前打印查找偏移量。
/p
跳过包含非可打印字符的文件。
/offline
利用脱机属性设置处理文件。
/f:File
从指定文件中读取文件列表。
/c:String
使用指定的文本作为文字搜索字符串。
/g:File
从指定文件得到搜索字符串。
/d:DirList
搜索以逗号分隔的目录列表。
/a:ColorAttribute
使用两个十六进制数指定颜色属性。
Strings
指定要在 FileName 中搜索的文本。
[ Drive:][Path] FileName [...]
指定要搜索的文件。
/?
在命令提示符下显示帮助。
注释
• 使用 Strings 和 [Drive:][Path] FileName [...]
在命令字符串中,所有 findstr 命令行选项必须在 Strings 和 [Drive:][Path] FileName [...] 之前。
• 在 findstr 中使用正则表达式
Findstr 可以在任何 ASCII 文件或文件中精确查找所要查找的文本。然而,有时要匹配的信息只有一部分或要查找更宽广的信息范围。在这种情况下,findstr 具有使用正则表达式搜索各种文本的强大功能。
正则表达式是用于指定文本类型的符号,与精确的字符串相反。标记使用文字字符和元字符。每个在常规的表达式语法中没有特殊意义的字符都是文字字符,与出现的该字符匹配。例如,字母和数字是文字符号。元字符是在正则表达式语法中具有特殊意义(操作符或分隔符)的符号。
下表列出 findstr 接受的元字符。
字符 值
.
通配符:任何字符
*
重复:以前零次或多次出现的字符或类
^
行中的位置:行首
$
行中的位置:行尾
[class]
字符类:集中的任何一个字符
[^class]
反向类:非集中的任何一个字符
[X-y]
范围:指定范围内的任何字符
\X
转义:元字符 X 的文字用途
\ 字的位置:字首
xyz\>
字的位置:字尾
组合使用正则表达式语法的特殊字符功能十分强大。例如,下面的通配符 (.) 和重复符 (*) 的组合可以匹配任何字符串:
.*
将如下表达式用作匹配以“b”开头并以“ing”结尾的任意字符串的更大表达式的组成部分:
b.*ing
示例
使用空格分隔多个搜索字符串,除非参数以 /c 为前缀。要在文件 x.y 中搜索“hello”或“there”,请键入:
findstr "hello there" x.y
要在文件 x.y 中搜索“hello there”,请键入:
findstr /c:"hello there" x.y
若要查找文件 Proposal.txt 中出现的所有单词“Windows”(首字母 W 大写),请键入:
findstr Windows proposal.txt
若要搜索包含单词 Windows 的当前目录和所有子目录中的每个文件(不考虑字母大小写),请键入:
findstr /s /i Windows *.*
要查找包含字“FOR”的所有行(前面可有任意空格,如:计算机程序中的循环),并包括每次出现的行号,请键入:
findstr /b /n /c:"*FOR" *.bas
如 果要在相同组文件中搜索几个不同项目,请在新行上创建包含每个搜索标准的文本文件。也可以列出要在文本文件中搜索的确切文件。要使用文件 Finddata.txt 中的搜索标准来搜索 Filelist.txt 中列出的文件,然后将结果保存到文件 Results.out 中,请键入:
findstr /g:finddata.txt /f:filelist.txt > results.out
假设您想要查找当前目录和所有子目录中包含单词“computer”的每个文件,而不考虑字母的大小写。若要列出包含单词“computer”的所有文件,请键入:
findstr /s /i /m "\" *.*
现在假定不仅需要查找单词“computer”,而且需要查找以字母“comp”开头的所有其他单词,例如“compliment”和“compete”。请键入:
findstr /s /i /m "\
http://www.microsoft.com/technet/prodtechnol/windowsserver2003/zh-chs/library/ServerHelp/2b01d7f5-ab5a-407f-b5ec-f46248289db9.mspx?mfr=true
实例:
1.findstr . 2.txt 或 findstr "." 2.txt
从文件2.txt中查找任意字符,不包括空字符或空行
====================
2.findstr .* 2.txt 或 findstr ".*" 2.txt
从文件2.txt中查找任意字符包括空行和空字符
====================
3.findstr "[0-9]" 2.txt
从文件2.txt中查找包括数字0-9的字符串或行
====================
4.findstr "[a-zA-Z]" 2.txt
从文件2.txt中查找包括任意字符的字符串或行
====================
5.findstr "[abcezy]" 2.txt
从文件2.txt中查找包括a b c e z y字母的字符串或行
====================
6.findstr "[a-fl-z]" 2.txt
从文件2.txt中查找小写字符a-f l-z的字符串,但不包含g h I j k这几个字母。
====================
7.findstr "M[abc][hig]Y" 2.txt
从文件2.txt中可以匹配 MahY , MbiY, MahY等…..
====================
8. ^和$符号的应用
^ 表示行首,"^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. "\<…\>"这个表达式的作用
这个表示精确查找一个字符串,\<sss 表示字的开始位置,sss\>表示字的结束位置
echo hello world computer|findstr "\<computer\>"这样的形式
echo hello worldcomputer|findstr "\<computer\>" 这样的形式就不成了,他要找的是 "computer"这个字符串,所以不可以。
echo hello worldcomputer|findstr ".*computer\>"这样就可以匹配了
=====================