在Linux中,有两种流行的正则表达式(Regular Expressions)引擎:
- POSIX基本正则表达式(BRE)引擎
- POSIX扩展正则表达式(ERE)引擎
大多数Linux工具都支持BRE,但是只有一些工具支持ERE。
1. BRE模式
RE字符 | 含义及范例 |
^word | 含义:待查找的字符串(word)在行首 范例:查找行首为#开始的那一行,并列出行号 grep -n '^#' re.txt |
word$ | 含义:待查找的字符串(word)在行尾 范例:查找行尾为!开始的那一行,并列出行号 grep -n '!$' re.txt |
. | 含义:匹配任意单个字符,除了换行符。点符必须匹配一个字符。 |
含义:转义字符,将特殊符号的特殊含义去到 | |
* | 含义:重复零个到无穷多个的前一个字符 |
[list] | 含义:从字符集合的RE字符里面找出想要的字符 范例:查找含有(gl)或(gd)的那一行,需要特别留意的是,在[]当中代表一个待查找的字符,例如“a[afl]y”代表查找的字符串可以是aay,afy,aly,即[afl]代表a或f或l的意思 |
[n1-n2] | 含义:从字符集合的RE字符里面找出想要选取的字符范围 范例:查找含有任意数字的一行。需要特别留意,在字符集合[]中的减号-是有特殊含义的,它代表两个字符之间的所有连续字符。但这个连续与否与ASCII编码有关,因此,你的编码要设置正确。例如,所以大写字符为[A-Z]。 |
[^list] | 含义:从字符集合的RE字符里面找出不要的字符串或范围 |
{n,m} | 含义:连续n到m个前一个RE字符。若为{n}则是连续n个的前一个RE字符,若为{n,}则是连续n个以上的前一个RE字符 范例:在g与g之间有2个到3个的o存在的字符串,即(goog)(gooog): grep -n 'go{2, 3}g' re.txt |
注意:正则表达式的特殊字符与一般在命令行输入命令的通配符并不相同。例如,在通配符中,*代表零到无限多个字符的意思,但是在正则表达式中,*则是重复0到无穷多个的前一个RE字符的意思。
BRE特殊字符组
特殊符号 | 含义 |
[:alnum:] | 代表英文大小写字符及数字,即0-9,A-Z,a-z |
[:alpha:] | 任何英文大小写字符,即A-Z,a-z |
[:blank:] | 代表空格键与[Tab]键 |
[:cntrl:] | 代表键盘上面的控制按键,即包括CR,LF,Tab,Del等 |
[:digit:] | 代表数字,即0-9 |
[:graph:] | 除了空格符(空格键与[Tab]键)外的其他所有按键 |
[:lower:] | 代表小写字符,即a-z |
[:print:] | 代表任何可以被打印出来的字符 |
[:punct:] | 代表标点符号,即" ' ? ! ; : # $ |
[:upper:] | 代表大写字符,即A-Z |
[:space:] | 任何产生空格的字符,包括空格键[Tab]CR等 |
[:xdigit:] | 代表十六进制的数字类型,因此包括0-9,A-F,a-f的数字与字符 |
2. ERE模式
RE字符 | 含义及范例 |
? | 重复前面的字符0次到1次 |
+ | 重复前面的字符1次或多次 |
{m}、{m, n}(区间) | RE字符准确出现m次;RE字符至少出现m次,至多出现n次。gawk中要使用区间,必须指定--re-interval |
exp1|exp2 | 逻辑OR(正则表达式和管道符号之间不能有空格,否则它们也会加到正则表达式模式中) |
评论已关闭