字符匹配:
. 匹配任意单个字符
[] 匹配指定范围内的任意单个字符
[^] 匹配指定范围外的任意单个字符
[:alnum:] 字母和数字
[:alpha:] 代表任何英文大小写字符,即:A-Z,a-z
[:lower:] 小写字母
[:upper:] 大写字母
[:blank:] 空白字符(空格和制表符)
[:space:] 水平和垂直的空白字符(比[:blank:]包含的范围广)
[:cntrl:] 不可打印的控制字符(退格、删除、警铃...)
[:digit:] 十进制数字 [:xdigit:] 十六进制数字
[:graph:] 可打印的非空白字符
[:print:] 可打印字符
[:punct:] 标点符号
匹配次数:
用再要指定次数的字符后面,用于指定前面的字符要出现的次数
* 匹配前面的字符任意次,包括0次
贪婪模式: 尽可能长的匹配
ab* 包括 a ab abbbbb
ro*t 包括 rt rot root
.* 任意长度的任意字符
r.* 包括 ra ro root rooooooo
\? 匹配其前面的字符0次或1次
\+ 匹配其前面的字符至少1次
\{n\} 匹配前面的字符n次
\{m,n\} 匹配前面的字符至少m次,最多n次
\{,n\} 匹配前面的字符最多n次
\{n,\} 匹配前面的字符最少n次
位置锚定:
定位出现的位置
^ 行首锚定,用于模式的最左侧
$ 行尾锚定,用于模式的最右侧
^PATTERN$ 用于模式匹配整行
^$ 空行
^[[:space:]]*$ 空白行
\< 或 \b 词首锚定 用于单词模式的左侧
\> 或 \b 词尾锚定 用于单词模式的右侧
\<PATTERN\> 匹配整个单词
练习:
取出来/etc/init.d/functions文件里所有的函数名
grep ".*{$" /etc/init.d/functions |tr -d "{"
grep "^[_a-Z]*()" /etc/init.d/functions
grep -o "^[[:alnum:]_]\+[[:space:]]*()" /etc/init.d/functions
分组
分组:\(\) 将一个或多个字符捆绑在一起,当做一个整体进行处理,如:\(root\)\+
分组括号中的模式匹配到的内容会被正则表达式引擎记录于内部变量中,这些变量的命名方式为:\1,\2,\3,...
\1 表示从左侧起第一个左括号以及与之匹配右括号之间的模式所匹配到的字符
示例:
\(string1\+\(string2\)*\)
\1: string1\+\(string2\)*
\2: string2
后向引用:
引用前面的分组括号中的模式所匹配字符,而非模式本身
或者: \|
示例:
a\|b: a或b
C\|cat: C或cat
\(C\|c\)at: cat或Cat
表示法 | 描述 |
---|---|
\w | 匹配字母数字及下划线 |
\W | 匹配非字母数字及下划线 |
\s | 匹配任意空白字符,等价于[\t\n\r\f]. |
\S | 匹配任意非空字符 |
\d | 匹配任意数字,等价于[0-9]. |
\D | 匹配任意非数字 |