正则表达式
以grep为例:
使用格式:grep[选项]匹配模式 file对象
选项说明
--color=auto:对匹配到的文本着色,高亮显示
-i:忽略字符大小写直接加后面
-o:仅显示匹配到的字符串本身
-v:方向匹配,匹配到的文本不显示,不能匹配到行显示
-E:表示支持使用扩展的正则表达式,=egrep
-q:静默模式,不输出任何信息到标准输出
-A(after):显示匹配到的行和其后面的行,给一数字
grep -A 1 root /etc/passwd
-B(before):显示匹配到行和其前面的行,给一数字
grep -B 1 root /etc/passwd
-C(center):显示匹配到其前后的行,给一数字
grep -C 1 root /etc/passwd
匹配次数
用在要指定其出现的次数的字符的后面,用于限制其前面字符出现的次数,默认为贪婪模式*:
表示匹配其前面的字符任意次,0,1,多次例如:grep “x*y”
.*:匹配任意长度的任意字符
\?:匹配其前面的字符0次或一次,即其前面的字符是可有可无的
\+:匹配其前面的字符一次或多次,即其前面的字符要出现至少一次
\{m\}:精确匹配到其前面字符的m次
\{m,n\}:匹配其前面的字符至少m次,至多n次
\{0,n\}:至多n次
\{m,\}:至少m次
位置锚定
^:行首锚定,用于模式的最左边
$:行首锚定,用于模式的最右边
^pattern$:用于pattern来匹配整行
^$:空白行
^[[:space:]]$:空行或空白字符的行
单词:非特殊字符组成的连续字符都称为单词
\<或\b:词首锚定,用于单词模式的左侧
\>或\b:词尾锚定,用于单词模式的右侧
\<pattern\>:匹配完整单词
前言:egrep等效于grep -E ,基于扩展的正则表达式做模式匹配,那什么是扩展的正则表达式呢?
支持扩展的正则表达式实现类是于grep文本过滤功能:grep -E -o -i -v -q -A -B -C
-G;表示支持基本正则表达式
扩展正则表达式的元字符
1:字符匹配
.:匹配任意单个字符
[]:匹配制定范围外的任意单个字符
[^ ]:匹配指定范围外的任意单个字符
[[:digit:]] [[:lower:]] [[:upper:]]
[[:alpha:]] [[:alnum:]] [[:punct:]] [[:space:]]
2:次数匹配
*:任意次,0,1或多次
?:0次或1次,其前面的字符是可有可无的
+:其前面的字符至少一次
{m}:其前的字符m次
{m,n}:至少m次,至多n次
{0,n}:
{m,}:
3:位置锚定
^:行首锚定
$:行尾锚定
\<或\b:词首锚定,用于单词模式的左侧
\>或\b:词尾锚定,用于单词模式的右侧
4:分组及引用(分组和引用,也就搞定了Prthon的正则表达式)
():分组,括号内的模式匹配到的字符会被记录到正则表达式引擎的内部变量中
后向引用:/1,/2
[[email protected] ~]# cat feng
wo love wo
ni love ni
ta love ta
[[email protected] ~]# egrep "(w.).*\1" feng
wo love wo
a|b:表示a或者b--->grep“a|b“ feng
c|Cat:c或者cat
(c|C)at:cat或者Cat
通配符
- *:匹配任意长度的任意字符,可以一个都没有
- ?:匹配任意单个字符,必须有一个
- [ ]:匹配指定范围内的单个字符
- [^]:匹配指定范围外的任意当个字符
- [^[0-9]]或[^0-9]:表示匹配数字外的任意字符
- [^[:upper:]]:表示匹配大写字母外的任意字符
- pa[0-9]: pa后面匹配一个数字
- [a-z], [A-Z] [0-9] [a-z0-9] [abdxy]
- pa[0-9]: pa后面匹配一个数字
- pa[0-9][0-9]: pa后面匹配两个数字
- [[:upper:]]:表示所有大写字母
- [[:lower:]]:表示所有小写字母
- [[:alpha:]]:表示所有字母
- [[:digit:]]:表示所有数字
- [[:alnum:]]:表示所有的字母和数字
- [[:space:]]:表示所有的空白字符
- [[:punct:]]:表示所有的标点符号