正则表达式:使用单个字符串来描述或匹配一系列符合某个句法规则的字符串。在很多文本编辑器或其他的工具里,正则表达式通常用来检索和替换那些符合某个模式的文本内容。在对Linux系统进行管理时,我们有很多工具 支持正则表达式的匹配方法,常用的工具有grep、sed、awk等。
基本要素:字符类、数字限定符、位置限定符
grep是Linux下按行匹配文本的工具,其采用贪婪模式,即为匹配当前行中的所有的匹配内容。
-E:使用扩展正则匹配
--color:将匹配到的内容进行语法高亮
1.正则表达式所支持的合法字符
字符 | 说明 |
x | 字符x(x代表任何合法的字符) |
\\ | 反斜杠字符 |
\0mnn | 八进制数0mnn所表示的字符 |
\xhh | 十六进制值0xhh所表示的字符 |
\uhhhh | 十六进制值0xhhhh所表示的Unicode字符 |
\t | 制表符('\u0009') |
\n | 新行(换行)符('\u000A') |
\r | 回车符('\u000D') |
\f | 换页符('\u000C') |
\a | 报警(bell)符('\u0007') |
\e | Escape符('\u001B') |
\cx | x对用的控制符。如\cM匹配Ctrl-M。x值必须为A~Z或a~z其中之一。 |
2.正则表达式中有一些特殊的字符,其在正则表达式中有特殊的用途,如果要匹配这些特殊的字符,就需要先进行转义(前面添加\)。
特殊字符 | 说明 |
$ | 匹配一行的结尾(若要匹配$字符本身,使用\$,下面字符类似) |
^ | 匹配一行的开头 |
() | 标记子表达式的开头和结束的位置 |
[] | 标记中括号表达式的开头和结束的位置 |
{} | 标记前面子表达式的出现频度。 其中{N}表示出现N次;{N,}表示至少出现N次;{,M}表示最多出现M次;{N,M}表示至少出现N次,最多出现M次 。 |
* | 指定前面的子表达式可以出现零次或多次 |
+ | 指定前面的子表达式可以出现一次或多次 |
? | 指定前面的子表达式可以出现零次或一次 |
. | 匹配除过换行符\n之外的任何单字符 |
\ | 用于转义下面的字符 |
| | 指定两项之中任选一项 |
3.正则表达式中有一些可以匹配多个字符的特殊字符,称为预定义字符。
预定义字符 | 说明 |
. | 可以匹配任何字符(除换行符) |
\d | 可以匹配0~9的所有字符,[0~9] |
\D | 匹配非数字 |
\s | 匹配所有的空白字符,包括空格、制表符、回车符、换页符、换行符等,[\n\t\r\f] |
\S | 匹配所有的非空白字符,[^\n\t\r\f] |
\w | 匹配所有的单词字符,包括0~9所有数字、26个英文字符和下划线(_),[a-zA-Z0-9] |
\W | 匹配所有的非单词字符,[^a-zA-Z0-9] |
4.正则表达式中方括号表达式的用法:
方括号表达式 | 说明 |
可以表示枚举 | 如[abc],表示a、b、c中得任意一个字符 |
可以表示范围:- | 如[a-g],表示a~g范围内的任意字符 |
可以表示求否:^ | 如[^abc],表示非a、b、c的任意字符;[^a-g],表示不是a~g范围内的任意字符 |
表示“与”运算:&& | 如[a-g&&[bc]],表示a~g和[bc]的交集,即为b或c;[a-g&&[^bc]],表示a~g范围内所有字符除了b和c,即为[ad-g] |
表示“并”运算 | 类似枚举,如[a-d[m-p]],表示[a-dm-p] |
note:贪婪模式和非贪婪模式
贪婪模式:正则表达式匹配时,会尽可能多的去匹配符合条件的内容;
非贪婪模式:正则表达式匹配时,一旦发现符合要求的匹配项,立马就匹配成功,不会再继续匹配。
补充:
\b 匹配以英文字母,数字为边界的字符串
\B 匹配不以英文字母,数值为边界的字符串
a|b|c 匹配符合a字符 或是b字符 或是c字符 的字符串
abc 匹配含有 abc 的字符串
(pattern) () 这个符号会记住所找寻到的字符串,是一个很实用的语法。第一个 () 内所找到的字 符串变成 $1 这个变量或是 \1 变量,第二个 () 内所找到的字符串变成 $2 这个变量或是 \2 变量,以此类推下去。 /pattern/i i 这个参数表示忽略英文大小写,也就是在匹配字符串的时候,不考虑英文的大小写问 题。 \ 如果要在 pattern 模式中找寻一个特殊字符,如 "*",则要在这个字符前加上 \ 符号,这样才会让特殊字符失效。