基本正则表达式元字符:(四个方面)

1、字符匹配:

​ " . ":匹配任意单个字符

​ “ 【】”:匹配指定范围内的任意单个字符

​ “ ^”:匹配指定范围外的任意单个字符

​ 【:digit:】:数字

​ 【:alpha:】:字母

​ 【:alnum:】:数字和字母

​ 【【:digit:】】:匹配任意数字,

​ 【【:lower:】】:匹配小写字母,

​ 【【:upper:】】:匹配大写字母

[root@localhost dev]# grep r..t /etc/passwd
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
//输出以r开头,以t结尾的单词所在行

[root@localhost dev]# grep s[abcd]i /etc/passwd
//匹配以s开头,以i结尾,中间出现abcd中任意字母的,输出其所在行

[root@localhost ~]# grep r[[:alpha:]][[:alpha:]]t /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
//匹配所有以r开头,以t结尾,中间包含两个字母的单词,并输出其所在行

[root@localhost ~]# grep r[[:alpha:]]*t /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
//匹配所有以r开头,以t结尾的单词,并输出其所在行

2、匹配次数:

​ * (星):匹配 * 前面字符任意次数

​ .*:匹配任意长度的任意字符

​ \?:匹配前面的字符0次或1次

​ \ *:匹配一次或者多次

​ \ {m,n\ }:匹配 其前面的字符至少 m 次,至多 n 次

​ \ {0,n\ }:匹配至多n次

​ \ {m,\ }:至少m次

[root@localhost dev]# cat file
bcdy
sy
xxxxxxxxy
asd
yan
[root@localhost dev]# grep x*y file
bcdy
sy
xxxxxxxxy
yan
//匹配出现x任意次数,并且有y的输出

[root@localhost dev]# cat file
xxxxxxy
xxx
wxxy
bcs
bdfy
x
y
xy
[root@localhost dev]# grep "x\?y" file
xxxxxxy
wxxy
bdfy
y
xy
//只有有y就能匹配出来

3、位置锚定:

​ ^;行首锚定

​ $:行尾锚定

​ ^$:空行

​ ^ [[:space:]]*$:空行或包括空白字符的行

​ 词首锚定:\ < 或 \b

​ 词尾锚定:\ > 或 \b

​ 匹配完整单词:\ <索要匹配的单词\ >

[root@localhost dev]# grep r..t /etc/passwd
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

[root@localhost dev]# grep bash$ /etc/passwd
root:x:0:0:root:/root:/bin/bash
//行尾锚定,以bash单词结尾的所在行整行输出
[root@localhost dev]# grep "\<root" /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
//词首锚定

[root@localhost dev]# grep "\root\>" /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
//词尾锚定

[root@localhost dev]# grep "\<root\>" /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
//匹配完整单词

4、分组和引用:

\ (\ ):将一个或者多个字符捆绑在一起,当做一个整体进行处理

\(xy\)\ (zd\ )ab\1:把xy当做第一组,把zd当做第二组,取第一组

​ ​ ​ ​ ​ ​ ​ ​ ​ \1:引用第一个分组

[root@localhost dev]# grep l..e.*l..e test
he loves his lover
he likes his lover
she loves her lover
she likes her liker

[root@localhost dev]# grep "\(l..e\).*\1" test
he loves his lover
she loves her lover
she likes her liker
//匹配以 l 开头,其后出现 e 的单词作为第一组,\1 表示引用第一组,即表示结尾所匹配的单词应与第一组所匹配到的单词一样

练习:

1、显示/etc/passwd中不以/bin/bash结尾的行

[root@localhost dev]# grep -v /bin/bash$ /etc/passwd

2、找出/etc/passwd中两位数(或三位数)

[root@localhost dev]# grep "\<[0-9]\{2\}\>" /etc/passwd
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
//匹配二位数

[root@localhost dev]# grep -o "\<[0-9]\{2,3\}\>" /etc/passwd
//显示二位数或三位数及其所在行

3、找出ifconfig命令中IP地址

[root@localhost dev]# ifconfig ens33 |grep inet |grep -v inet6 |cut -b 14-30
192.168.134.112
上一篇:linux 下建立ssh代理用户


下一篇:linux中awk的使用