正则表达式
正则表达式(regular expression, RE)是一种字符模式,用于在查找过程中匹配指定的字符。
在大多数程序里,正则表达式都被置于两个正斜杠之间;例如/l[oO]ve/就是由正斜杠界定的正则表达式,
它将匹配被查找的行中任何位置出现的相同模式。在正则表达式中,
正则表达式基本元字符
正则表达式拓展元字符
元字符使正则表达式具有处理能力。所谓元字符就是指那些在正则表达式中具有特殊意义的专用字符,可以用来规定其前导字符(即位于元字符前面的字符)在目标对象中的出现模式。
1. 正则表达式基本元字符
基本正则表达式元字符
元字符
示例 功能 示例
^ 行首定位符 ^love
$ 行尾定位符 love$
. 匹配单个字符 l..e
* 匹配前导符0到多次 ab*love
.* 匹配任意多个字符(贪婪匹配)
[] 匹配方括号中任意一个字符 [lL]ove
[ - ] 匹配指定范围内的一个字符 [a-z0-9]ove
[^] 匹配不在指定组里的字符 [^a-z0-9]ove
\ 用来转义元字符 love\.
\< 词首定位符 \<love
\> 词尾定位符 love\>
\(\) 匹配后的标签
2. 正则表达式拓展元字符
扩展正则表达式元字符 功能 示例
+ 匹配一次或多次前导字符 [a-z]+ove
? 匹配零次或一次前导字符 lo?ve
a|b 匹配a或b love|hate
x{m} 字符x重复m次 o{5}
x{m,} 字符x重复至少m次 o{5,}
x{m,n} 字符x重复m到n次 o{5,10}
() 字符组 love(able|rs)ov ov+ (ov)+
正则判断
[root@linux-server ~]
[root@linux-server ~]
yes
[root@linux-server ~]
[root@linux-server ~]
no
[root@linux-server ~]
[root@linux-server ~]
grep使用
[root@localhost ~]
[root@localhost ~]
[root@localhost ~]
[root@localhost ~]
[root@localhost ~]
[root@localhost ~]
grep正则过滤
* 0或多个
[root@linux-server ~]
[root@linux-server ~]
abrt:x:1041:1041::/home/abrt:/bin/bash
\< 词首定位符号 \>词尾定位符号
[root@linux-server ~]
Jack JACK JAck jackly jack
:% s/\<[Jj]ack\>/123/g
^以什么开头
[root@linux-server ~]
root:x:0:0:root:/root:/bin/bash
$以什么结尾
[root@linux-server ~]
root:x:0:0:root:/root:/bin/bash
confluence:x:1000:1000:Atlassian Confluence:/home/confluence:/bin/bash
to:x:1003:1003::/home/to:/bin/bash
. 匹配单个字符
[root@linux-server ~]
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
dockerroot:x:998:995:Docker User:/var/lib/docker:/sbin/nologin
[root@linux-server ~]
operator:x:11:0:operator:/root:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
.* 任意多个字符
[root@linux-server ~]
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin polkitd:x:999:997:User for polkitd:/:/sbin/nologin postfix:x:89:89::/var/spool/postfix:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin dockerroot:x:998:995:Docker User:/var/lib/docker:/sbin/nologin
tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin
abrt:x:1041:1041::/home/abrt:/bin/bash
[] 匹配方括号中的任意一个字符
[root@linux-server ~]
[root@linux-server ~]
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
dockerroot:x:998:995:Docker User:/var/lib/docker:/sbin/nologin
[ - ] 匹配指定范围内的一个字符
[root@linux-server ~]
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
dockerroot:x:998:995:Docker User:/var/lib/docker:/sbin/nologin
[^] 匹配不在指定组内的字符,非得意思
[root@linux-server ~]
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
dockerroot:x:998:995:Docker User:/var/lib/docker:/sbin/nologin
[root@linux-server ~]
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
dockerroot:x:998:995:Docker User:/var/lib/docker:/sbin/nologin
[root@linux-server ~]
[root@linux-server ~]
[root@newrain ~]
[root@newrain ~]
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
dockerroot:x:998:995:Docker User:/var/lib/docker:/sbin/nologin Root:x:1042:1042::/home/Root:/bin/bash
[root@linux-server ~]
root:x:0:0:root:/root:/bin/bash
\(\)匹配后的标签
[root@linux-server ~]
IPADDR=192.168.1.123
GATEWAY=192.168.1.1
NETMASK=255.255.255.0
DNS=114.114.114.114
:%s/\(192.168.1.\)123/\12/
:%s/\(192.\)\(168.\)\(1.\)2/\1\2\35/
:%s/\(192.\)\(168.\)\(1.\)\(5\)/\1\26.\4/
grep扩展正则匹配—egrep
扩展正则表达式元字符 功能 示例
+ 匹配一次或多次前导字符 [a-z]+ove
? 匹配零次或一次前导字符 lo?ve
a|b 匹配a或b love|hate
x{m} 字符x重复m次 o{5}
x{m,} 字符x重复至少m次 o{5,}
x{m,n} 字符x重复m到n次 o{5,10}
() 字符组 love(able|rs)ov ov+ (ov)+
egrep 支持正则表达式的拓展元字符
[root@linux-server ~]
nameserver 192.168.246.2
+ 匹配一个或多个前导字符
[root@linux-server ~]
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
dockerroot:x:998:995:Docker User:/var/lib/docker:/sbin/nologin
? 匹配零次或一次前导字符
[root@linux-server ~]
abrt:x:1041:1041::/home/abrt:/bin/bash
a|b 匹配a或b
[root@linux-server ~]
[root@linux-server ~]
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
dockerroot:x:998:995:Docker User:/var/lib/docker:/sbin/nologin
x{m} 字符x重复m次
[root@linux-server ~]
love
love.
loove
looooove
[root@linux-server ~]
loove
looooove
[root@linux-server ~]
loove
looooove
[root@linux-server ~]
总结:
love* 出现0-n次
love? 出现0-1次
love+ 出现1-n次
love{2} 出现2次
lo(ve)* 出现0-n次
lo(ve)? 出现0-1次
l(ove)+ 出现1-n次
lo(ve){4} 出现4次