linux正则表达式
正则表达式是对字符串操作的一种方式,用事先定义好的一些特定字符、及这些字符的组合,组成一个“规则字符串”。
元字符的意义:
\ 转义字符 ^ 匹配输入字符串的开始位置 $ 匹配输入字符串的结束位置
* 匹配前面的子表达式任意次。例如: zo*能匹配z,也能匹配zo以及zoo
+ 匹配前面的子表达式一次或多次(大于等于一次)。例如:zo+能匹配zo以及zoo,但不能匹配z
? 匹配前面的子表达式零次或一次。例如:do(es)?能匹配do或does中的do
{n} n是一个非负整数,匹配确定的n次。例如:o{2}不能匹配Bob中的o,但能匹配food中的两个o
{n,} n是一个非负整数,至少匹配n次。例如:o{2,}不能匹配Bob中的o,但能匹配foooood中的所有o。o{1,}等价于o+, o{0,}等价于o*
{n,m} n和m均为非负整数,其中n<=m。意思是至少匹配n次且最多匹配m次。o{1,3}将匹配fooooood中前三个o为一组,后三个o为一组。注意,在逗号和两个数之间不能有空格
? 当该字符紧跟在任何一个其他限制符*,+,?,{n},{n,},{n,m}后面时,匹配模式是非贪婪的。非贪婪模式尽可能少的匹配所搜索的字符串,而默认的贪婪模式则尽可能多的
匹配所搜索的字符串。例如:对于字符串oooo,o+将尽可能多的匹配o,得到结果是oooo,而o+?则尽可能少的匹配o,得到结果是o,o,o,o
. 匹配除\r\n之外的任何单个字符
(pattern) 匹配pattern并获取这一匹配
(?:pattern) 非获取匹配,匹配pattern但不获取匹配结果,使用|字符串来组合一个模式的各个部分,例如:industr(?:y|lies)就是industry|industries
(?=pattern) 非获取匹配,正向肯定预查,在任何匹配pattern的字符串开始处匹配查找字符串,该匹配不需要获取供以后使用。
(?!pattern) 非获取匹配,正向否定预查,在任何不匹配pattern的字符串开始处查找字符串。
(?<=pattern) 非获取匹配,反向肯定预查,与正向肯定预查类似,只是方向相反。
(?<!pattern) 非获取匹配,反向否定预查,与正向否定预查类似,只是方向相反。
x|y 匹配x或y,例如:z|food能匹配z或food,[z|f]ood则匹配zood或food或|ood
[xyz] 字符集合,匹配所包含的任意一个字符,例如:[abc]可以匹配plain中的a
[^xyz] 负值字符集合,匹配未包含的任意字符,例如:[^abc]可以匹配plain中的plin
[a-z] 字符范围,匹配指定范围内的任意字符,例如:[a-z]可以匹配a到z范围内的任意小写字母字符
[^a-z] 负值字符范围,匹配任何不在指定范围内的任意字符,例如:[^a-z]可以匹配任何不在a到z范围内的任意字符
\b 匹配一个单词边界,也就是指单词和空格间的位置(正则表达式的匹配有两种概念,一种是匹配字符,一种是匹配位置),例如:er\b可以匹配never中的er,
但不能匹配verb中的er
\B 匹配非单词边界,er\B能匹配verb中的er,但不能匹配never中的er
\cx 匹配由x指明的控制字符,例如:\cM匹配一个Control-M或回车符,x的值必须为A-Z或a-z之一。否则,将c视为一个原义的c字符
\d 匹配一个数字字符,等价于[0-9]
\D 匹配一个非数字字符,等价于[^0-9]
\f 匹配一个换页符,等价于\x0c和\cL
\n 匹配一个换行符,等价于\x0a和\cJ
\r 匹配一个回车符,等价于\x0d和\cM
\s 匹配任何不可见字符,包括空格、制表符、换页符等等,等价于[\f\n\r\t\v]
\S 匹配任何可见字符,等价于[^\f\n\r\t\v]
\t 匹配一个制表符,等价于\x09和\cI
\v 匹配一个垂直制表符,等价于\x0b和\cK
\w 匹配包括下划线的任何单词字符
\W 匹配任何非单词字符,等价于[^A-Za-z0-9]
\num 匹配num,其中num是一个正整数,对所获取的匹配的引用,例如:(.)\1匹配两个连续的相同字符
\<
\> 匹配word的开始(\<)和结束(\>),例如:正则表达式\<the\>能够匹配字符串for the wise中的the,但不能匹配otherwise中的the
grep指令:
-A<列数> 除了显示符合范本样式的那一列外,还显示该列之后的内容
-B<列数> 除了显示符合范本样式的那一列外,还显示该列之前的内容
-c 统计符合范本样式的列数
-C<列数> 除了显示符合范本样式的那一列外,还显示该列之前和之后的内容
-d 指定查找的是目录
-h 不显示该列所属文件的名称
-H 显示该列所属文件的名称
-i 忽略字符的大小写
-I 不忽略大小写
-n 标出符合范本样式的行号