正则表达式
1. 字符匹配
. 匹配任意单个字符,可以是一个汉字
[] 匹配指定范围内的任意单个字符,实例:[abc!@#$..] [0-9] [a-z] [a-zA-Z]
[^] 匹配指定范围外的任意单个字符,示例:[^abc!@#%..]
[:alnum:] 字母和数字
[:alpha:] 代表任何英文大小写字符,亦即A-Z,a-z
[:lower:] 小写字母,示例[[:lower:]],相当于[a-z]
[:upper:] 大写字母
[:blank:] 空白字符(空格和制表符)
[::space] 水平和垂直的空白字符(比[:blank:])包含范围广
[:cntrl:] 不可打印的控制字符(退格、删除、警铃。。。)
[:digit:] 十进制数字
[:xdigit:] 十六进制数字
[:graph:] 可打印的非空白字符
[:print:] 可打印字符
[:punct:] 标点符号
举例
ls /etc/rc.d |grep 'rc[0-6]'
2. 匹配次数
* 匹配前面字符任意次,包括0次,贪婪模式:尽可能长的皮配,如:a* 表示a出现的任意次数。
.* 任意长度的任意字符
\? 匹配其前面的字符0或1次,即:可有可无
\+ 匹配其前面字符至少1次,即:肯定有,>=1
\{n\} 匹配前面的字符至少1次,即:a\{10\}
\{m,n\} 匹配前面的字符至少m次,至多n次
\{,n\} 匹配前面的字符至多n次,<=2的意思
\{n,\} 匹配前面的字符至少n次
3.位置锚定
^ 行首锚定,用于模式的最左侧
$ 行尾锚定,用于模式的最右侧
^PATTERN$ 用于模式匹配行
^$ 空行
^[[:space:]]*$ 空白行
\<或\b 词首锚定,用于单词模式的左侧
\>或\b 词尾锚定,用于单词模式的右侧
\<PATTERN>\ 匹配整个单词
举例
grep "^[#]" /etc/fstab #输出以#开头的行
grep "^[^#]" /etc/fstab #排除以#开头的行
4.分组
分组: ()将多个字符捆绑在一起,当作一个整体处理,如:(root)+
\(string1)\(string2\)
举例
cat /etc/passwd | grep "^\(.*\>\).*\<\1$" # 匹配行尾和行首相同的字符串
df -hT|egrep -o "([0-9]+%)" # 匹配只显示磁盘使用率