正则表达式是由一类特殊字符所编写的模式,通过这些字符的使用,我们能检索 查找文本中符合某些规则的内容。
正则表达式元字符的分类有:字符匹配,匹配次数,位置锚定,分组等。
字符匹配:
. : 匹配任意单个字符
[] : 匹配指定范围内的任意单个字符
[^] : 匹配指定范围外的任意单个字符
[:alnum:] 数字和字符
[:alpha:] 英文大小写字符 a-z A-Z
[:lower:] 小写字母
[ :upper:] 大写字母
[:space:] 专门匹配空格
注意:这几个使用频率相对较高。
[:cntrl:] 不可打印的控制字符(退格、删除、警铃…)
[:digit:] 十进制数字 [:xdigit:]十六进制数字
[:graph:] 可打印的非空白字符
[:print:] 可打印字符
[:punct:] 标点符号
注意:这几个使用频率相对较低。
匹配次数
* 匹配前面的字符任意次,0 到无穷
.* 任意字符出现任意次,比如说 123 456 abc (这个使用频率很高,很重要)
a* a字符出现任意次 aaaa aa
[[:lower:]]* 任意小写字母出现任意次
\? 匹配前面的字符出现0次或者1次
a\? 出现0次或者1次
\+ 匹配前面的字符至少1次
a\+ a至少出现1次
\{n\} 前面的字符出现n次
[0-9]\{3\} 000-999
\{m,n\}匹配前面的字符出现m到n次,m,n是一个范围
[0-9]\{1,3\} 0-999
\{,n\}匹配前面的字符最多出现n
[0-9]\{,3\} 最大匹配是999
\{m,\}匹配前的字符至少出现m次
[0-9]\{3,\} 000 无穷
位置锚定
^ 锚定行首
$ 锚定行尾
^$ 匹配空行的
^[[:space:]] 行首是空白的字符
^[[:space:]]*$ 也是 空行
^a 以a开头的行
b$ 以b结束的行
^a.*b$ 以a开头 中间任意字符 以b结尾的行
^a.*[[:space:]]\{3\}.*b$ a开头跟任意字符,中间出现三次空格再跟任意字符 以b结尾的行
^# 以#开头的行
例子:cat /etc/profile | grep -v “^#” | grep -v “^$”
例子: cat /etc/httpd/conf/httpd.conf | grep -v “^#” | grep -v “^$”
\b \b 匹配词首和词尾
\< \> 匹配词首和词尾
例子: \broot\b \<root\> 锚定root这个单词,不会匹配例如root123之类的单词
分组
将匹配规则分成不同的组 使用 1 2 3..等数字去标识,便于后面使用同样规则的时候可以直接饮用
\(root\)\+\1 注意:这种使用方法比较常用
\(string1\+\(string2\)*\)
\1 string1\+\(string2\)*
\2 string2
或者 |
a \| b
C \| cat
原创文章,作者:fsy,如若转载,请注明出处:http://www.178linux.com/72664