- 基本的正则表达式,
Basic Regular Expression
又叫Basic RegEx
简称BREs
- 扩展的正则表达式,
Extended Regular Expression
又叫Extended RegEx
简称EREs
- Perl 的正则表达式,
Perl Regular Expression
又叫Perl RegEx
简称PREs
-
grep
/egrep
:-
grep
支持:BREs
、EREs
、PREs
正则表达式grep
指令后不跟任何参数, 则表示要使用 "BREs
"grep
指令后跟 "-E
" 参数, 则表示要使用 "EREs
"grep
指令后跟 "-P
" 参数, 则表示要使用 "PREs
"
-
egrep
支持:EREs
、PREs
正则表达式egrep
指令后不跟任何参数, 则表示要使用 "EREs
"egrep
指令后跟 "-P
" 参数, 则表示要使用 "PREs
"
-
-
sed
:sed
文本工具支持:BREs
、EREs
sed
指令默认是使用 "BREs
"sed
命令参数 "-r
" , 则表示要使用"EREs
"
-
awk
/gawk
:- awk 文本工具支持: EREs
- awk 指令默认是使用 "EREs"
符号 | 名字 | 含义 |
---|---|---|
reg(?=exp) |
零宽度正先行断言 | reg 匹配的内容后面内容满足 exp 规则 |
reg(?!exp) |
零宽度负先行断言 | reg 匹配的内容后面内容不满足 exp 规则 |
(?<=exp)reg |
零宽度正后发断言 | reg 匹配的内容前面内容满足 exp 规则 |
(?<!exp)reg |
零宽度负后发断言 | reg 匹配的内容前面内容不满足 exp 规则 |
以(?=exp)
零宽度正先行断言为例
- "先行"表示待校验的位置在前,即校验的位置在
exp
匹配的内容之前 - "正"表示
exp
描述的规则,匹配校验位置后面的内容
断言元字符 | 意义:以0A1B2 为例 |
---|---|
^ |
行首,字符串首 表示位置0 |
$ |
行尾,字符串尾部,表示位置2 |
\b |
字分界线,可以表示:0,2位置 |
\B |
非字分界线,可以表示1位置 |
\A |
目标的开头(独立于多行模式) 表示位置0 |
\Z |
目标的结尾或位于结尾的换行符前(独立于多行模式) 表示位置2 |
\z |
目标的结尾(独立于多行模式)表示位置2 |
\G |
目标中的第一个匹配位置 |
A , Z , z , G 很少使用 |
例1. 取运行级别
shell> cat /etc/inittab
...
id:3:initdefault:
...
shell> grep -aPo '[0-9](?=:initdefault)' /etc/inittab
3
例2. 取系统版本
shell> cat /etc/redhat-release
Red Hat Enterprise Linux Server release 7.9 (Maipo)
shell> grep -aPo '(?<=release\s)\d' /etc/redhat-release
7
含义 | 字符 | Basic RegEx | Extended RegEx | Python RegEx | Perl regEx |
---|---|---|---|---|---|
转义 | \ |
\ |
\ |
\ |
\ |
匹配行首1 | ^ |
^ |
^ |
^ |
^ |
匹配行尾2 | $ |
$ |
$ |
$ |
$ |
匹配空行 | ^$ |
^$ |
^$ |
^$ |
^$ |
匹配整行 | ^string$ |
^string$ |
^string$ |
^string$ |
^string$ |
匹配左边界 | \< |
\< |
\< |
N/A | N/A(=\b ) |
匹配右边界 | \> |
\> |
\> |
N/A | N/A(=\b ) |
匹配左右边界 | \<x\> |
\<x\> |
\<x\> |
N/A | N/A(=\b ) |
匹配表达式 | () |
N/A | () |
() |
() |
匹配表达式 | \(\) |
\(\) |
N/A(=() ) |
N/A(=() ) |
N/A(=() ) |
匹配0,1次(={0,1} ) |
? |
N/A(=\? ) |
? |
? |
? |
匹配0,1次(=\{0,1\} ) |
\? |
\? |
N/A(=? ) |
N/A(=? ) |
N/A(=? ) |
非贪婪模式 | ? |
N/A | N/A | N/A | N/A |
匹配字符(除\n )3 |
. |
. |
. ((^$)|(.) :Include\n ) |
. |
. ([.\n] :Include\n ) |
匹配任意多次(={0, } ) |
* |
* |
* |
* |
* |
匹配至少一次(=\{1,\} ) |
\+ |
\+ |
N/A(=+ ) |
N/A(=+ ) |
N/A(=+ ) |
匹配至少一次(={1, } ) |
+ |
N/A(=\+ ) |
+ |
+ |
+ |
匹配n次 | {n} |
N/A(=\{n\} ) |
{n} |
{n} |
{n} |
匹配至少n次 | {n,} |
N/A(=\{n,\} ) |
{n,} |
{n,} |
{n,} |
匹配n-m次 | {n,m} |
N/A(=\{n,m\} ) |
{n,m} |
{n,m} |
{n,m} |
匹配 x 或 y | x|y |
N/A(=x|y ) |
x|y |
x|y |
x|y |
匹配0-9数字 | [0-9] |
[0-9] |
[0-9] |
[0-9] |
[0-9] |
匹配此字符集 | [xyz] |
[xyz] |
[xyz] |
[xyz] |
[xyz] |
匹配非次字符集4 | [^xyz] |
[^xyz] |
[^xyz] |
[^xyz] |
[^xyz] |
匹配所有字母 | [A-Za-z] |
[A-Za-z] |
[A-Za-z] |
[A-Za-z] |
[A-Za-z] |
匹配非字母 | [^A-Za-z] |
[^A-Za-z] |
[^A-Za-z] |
[^A-Za-z] |
[^A-Za-z] |
匹配数字(=[0-9] ) |
\d |
N/A | N/A | \d |
\d |
匹配非数字(=[^0-9] ) |
\D |
N/A | N/A | \D |
\D |
匹配非空白字符(=[^\f\n\r\t\v] ) |
\S |
N/A | N/A | \S |
\S |
匹配空白字符5 | \s |
N/A | N/A | \s |
\s |
匹配非单词数字 | \W |
\W |
\W |
\W |
\W |
匹配单词+数字+下划线 | \w |
\w |
\w |
\w |
\w |
匹配非单词边界 | \B |
\B |
\B |
\B |
\B |
匹配单词边界 | \b |
\b |
\b |
\b |
\b |
匹配横向制表符(=\x09 ,\cI ) |
\t |
N/A | N/A | \t |
\t |
匹配垂直制表符(=\x0b ,\cK ) |
\v |
N/A | N/A | \v |
\v |
匹配换行符(=\x0a ,\cJ ) |
\n |
N/A | N/A | \n |
\n |
匹配换页符(=\x0c ,\cL ) |
\f |
N/A | N/A | \f |
\f |
匹配回车符(=\x0d ,\cM ) |
\r |
N/A | N/A | \r |
\r |
匹配\ |
\\ |
\\ |
\\ |
\\ |
\\ |
匹配控制字符x6 | \cx |
N/A | N/A | N/A | \cx |
匹配十六进制n, n为2位数字7 | \xn |
N/A | N/A | N/A | \xn |
匹配引用 | \num |
N/A | \num |
\num |
N/A |
匹配字母+数字 | [:alnum:] |
[:alnum:] |
[:alnum:] |
[:alnum:] |
[:alnum:] |
匹配字母 | [:alpha:] |
[:alpha:] |
[:alpha:] |
[:alpha:] |
[:alpha:] |
匹配数字 | [:digit:] |
[:digit:] |
[:digit:] |
[:digit:] |
[:digit:] |
匹配小写字母 | [:lower:] |
[:lower:] |
[:lower:] |
[:lower:] |
[:lower:] |
匹配大写字母 | [:upper:] |
[:upper:] |
[:upper:] |
[:upper:] |
[:upper:] |
匹配空白字符 | [:space:] |
[:space:] |
[:space:] |
[:space:] |
[:space:] |
空格和制表符 | [:blank:] |
[:blank:] |
[:blank:] |
[:blank:] |
[:blank:] |
匹配可见字符8 | [:graph:] |
[:graph:] |
[:graph:] |
[:graph:] |
[:graph:] |
匹配可打印字符9 | [:print:] |
[:print:] |
[:print:] |
[:print:] |
[:print:] |
匹配控制字符 | [:cntrl:] |
[:cntrl:] |
[:cntrl:] |
[:cntrl:] |
[:cntrl:] |
匹配标点符号10 | [:punct:] |
[:punct:] |
[:punct:] |
[:punct:] |
[:punct:] |
匹配十六进制数 | [:xdigit:] |
[:xdigit:] |
[:xdigit:] |
[:xdigit:] |
[:xdigit:] |
1 awk 指令中, "^" 则是匹配字符串的开始 ↺
2 awk 指令中, "$" 则是匹配字符串的结尾 ↺
3 awk指令中的 "." 能匹配换行符 ↺
4 "[^xyz]" 在awk 指令中则是匹配未包含的任意一个字符+换行符 ↺
5 包括空格、制表符、换页符等等(等价于[ \f\n\r\t\v]) ↺
6 例如:\cM匹配一个Control-M 或回车符,x 的值必须为 A-Z 或 a-z 之一,否则,将 c 视为一个原义的 'c' 字符 ↺
7 '\x41' 匹配 "A"。'\x041' 则等价于'\x04' & "1" ↺
8 不含空格和换行符 ↺
9 不含控制字符 "[:cntrl:]", 字符串结束符 "\0", EOF文件结束符("-1"), 但包括空格符号 ↺
10 不包括 "[:alnum:]"、"[:cntrl:]"、"[:space:]" 这些字符集 ↺