扩展正则表达式 | 学习笔记

简介: 快速学习扩展正则表达式。

开发者学堂课程【Linux 文本处理、正则表达式与 Vim扩展正则表达式】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/592/detail/8353


扩展正则表达式

 

内容介绍

一、egrep 及扩展的正则表达式

二、次数匹配

三、例题演示

 

一、egrep 及扩展的正则表达式

egrep=grep-E

egrep[OPTIONS]PATTERN[FILE...]

扩展正则表达式的元字符:

字符匹配:

.任意单个字符

]指定范围的字符

[^]不在指定范围的字符

 

二、次数匹配

*匹配前面字符任意次

? 01

+ 1次或多次

{m}匹配 m

{mn}至少 m,至多 n

位置锚定:

IA 行首

行尾

\<\b 语首

\>\b 语尾

分组:

0

后向引用:\1\2..

或者:

a|b a b

C|cat C cat

(C|c)at Cat 或 cat

 

三、例题演示

1)练习一:使用 egrep 取出 /etc/rc.d/init.d/functions 中其基名

[root@centos7 ~]#basename /etc/rc.d/init.d/functions

functions

//目名

[root@centos7 ~]#dirname  /etc/rc.d/init.d/functions

/etc/rc.d/init.d

//只取基名,grep可以进行行过滤,o 选项是匹配正则表达式的选项

[root@centos7 ~]#echo /etc/rc.d/init.d/functions |grep -Eo [^/]+

//运行

etc

rc.d

init.d

functions

[root@centos7 ~]#echo /etc/rc.d/init.d/functions |grep -Eo [^/]+$

//运行

functions

[root@centos7 ~]#echo /etc/rc.d/init.d/functions |grep -o [^/]\+$

//运行

functions

[root@centos7 ~]#echo /etc/rc.d/init.d/functions |grep -Eo .*/

//运行

/etc/rc.d/init.d/

[root@centos7 ~]#echo /etc/rc.d/init.d/functions

//运行

/etc/rc.d/init.d/

[root@centos7 ~]#echo /etc/rc.d/init.d/ |grep -Eo .*/

//运行

/etc/rc.d/init.d/

[root@centos7 ~]#dirname  /etc/rc.d/init.d/

//运行

/etc/rc.d

[root@centos7 ~]#echo /etc/rc.d/init.d |grep -Eo .*/

//运行

/etc/rc.d/

[root@centos7 ~]#echo /etc/rc.d/init.d/ |grep -Eo .*/

//运行

/etc/rc.d/init.d/

上述运行结果:

[root@centos7 ~]#echo /etc/rc.d/init.d/ |grep -Eo .*/.*[^/]?”

//运行

/etc/rc.d/init.d/

[root@centos7 ~]#echo /etc/rc.d/init.d/ |grep -Eo .*/.*[^/]

//运行

/etc/rc.d/init.d

[root@centos7 ~]#echo /etc/rc.d/init.d |grep -Eo .*/.*[^/]

//运行

/etc/rc.d/init.d

[root@centos7 ~]#echo /etc/rc.d/init.d/ |grep -Eo .*/.*[^/]

//运行

/etc/rc.d/init.d

[root@centos7 ~]#echo /etc/rc.d/init.d/ |grep -Eo .*/.*[^/] | grep -Eo .*/

//运行

/etc/rc.d/

[root@centos7 ~]#echo /etc/rc.d/init.d |grep -Eo .*/.*[^/]|grep -Eo .*/

//运行

/etc/rc.d/

[root@centos7 ~]#echo /etc/rc.d/init.d/ |grep -Eo .*/.*[^/]

//运行

/etc/rc.d/init.d

[root@centos7 ~]#echo /etc/rc.d/init.d |grep -Eo .*/.*[^/]

//运行

/etc/rc.d/init.d/

[root@centos7 ~]#echo /etc/rc.d/init.d |grep -Eo .*[^/]

//运行

/etc/rc.d/init.d

[root@centos7 ~]#echo /etc/rc.d/init.d/ |grep -Eo .*[^/]

//运行

/etc/rc.d/init.d

[root@centos7 ~]#echo /etc/rc.d/init.d/ |grep -Eo .*[^/]| grep -Eo .*/

//运行

/etc/rc.d/

上述代码多次实验的结果

2)练习二:利用扩展正则表达式分别表示0-910-99100-199200-249250-255,显示ifconfig命令结果中所有IPv4地址

//显示IP

[root@centos71#ip a

1:lo:<LOOPBACK,υD,LOwER_UP>mtu 65536,  qdisc noqueue  state UNKMOWN group default qlen 1000

link/ loopback 00 :00:00:00:00:00 brd 00:00:00:00:00:00

inet 127.0.0.1/8 scope host lo

valid _ lft forever preferred _ lft forever

inet6  ::1/128 scope host

valid _ lft forever preferred _ lft forever

2:eth0: <BROADCAST ,MULTICAST,UP,LOMER_UP> mtu 1500 qdisc pfifo_fast state up group default qlen 1000

link/ether 00:0c:29:71:55:bd brd ff:ff:ff:ff:ff:ff

inet 192. 168. 34.7/24 brd 192. 168. 34. 255 scope global  noprefixroute eth0

valid _lft forever preferred _lft forever

inet6fe80::20c:29ff:fe71:55b3/64 scope link

valid_lftforever preferred_lftforever

3eth1: <BROADCAST ,MULTICAST,UP,LOMER_UP> mtu 1500 qdisc pfifo_fast state up group default qlen 1000

link/ether 00:0c:29:71:55:bd brd ff:ff:ff:ff:ff:ff

inet 192. 168. 34.7/24 brd 192. 168. 34. 255 scope global  noprefixroute eth1

valid _lft forever preferred _lft forever

inet6fe80::20c:29ff:fe71:55b3/64 scope link

valid_lftforever preferred_lftforever

[root@centos7~]#[0-9][[:digig:]]

(2)扩展正则表达式分别表示0-910-99100-199200-249250-255.

0-9  [0-9]

10-99  [1-9]?[0-9]

100-199   1?[0-9]?[0-9]

200-249   2[0-4][0-9]

250-255   25[0-5]

(3)表示 IP 的范围

(([1-9]?[0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([1-9]?[0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])

[root@centos7 ~]#ifconfig | grep -Eo(([1-9]?[0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([1-9]?[0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])

//运行

192.168.34.7

255.255.255.0

192.168.34.255

172.16.0.7

255.255.0.0

172.16.255.255

127.0.0.1

255.0.0.0

扩展正则表达式比较简洁,若本题选用基本正则表达式会过于繁琐,以下为采用基本正则表达式的代码

[root@centos7 ~]#ifconfig | grep -o \(\([1-9]\?[0-9]\|1[0-9]\{2\}\|2[0-4][0-9]\|25[0-5]\)\.\){3\}\([1-9]\?[0-9]\|1[0-9]\{2\}\|2[0-4][0-9]\|25[0-5]\)

//运行

192.168.34.7

255.255.255.0

192.168.34.255

172.16.0.7

255.255.0.0

172.16.255.255

127.0.0.1

255.0.0.0

相关文章
java202303java学习笔记第二十七天-正则表达式之3
java202303java学习笔记第二十七天-正则表达式之3
43 0
java202303java学习笔记第二十八天-正则表达式基本练习2
java202303java学习笔记第二十八天-正则表达式基本练习2
67 0
java202303java学习笔记第二十八天-正则表达式基本练习1
java202303java学习笔记第二十八天-正则表达式基本练习1
62 0
java202303java学习笔记第二十八天-正则表达式基本练习3 原
java202303java学习笔记第二十八天-正则表达式基本练习3 原
52 0
java202303java学习笔记第二十七天-正则表达式基本练习1
java202303java学习笔记第二十七天-正则表达式基本练习1
70 0
java202303java学习笔记第二十七天-正则表达式之2
java202303java学习笔记第二十七天-正则表达式之2
62 0
java202303java学习笔记第二十七天-正则表达式之1
java202303java学习笔记第二十七天-正则表达式之1
61 0
java202303java学习笔记第二十七天-正则表达式之4
java202303java学习笔记第二十七天-正则表达式之4
41 0
java202303java学习笔记第二十七天-正则表达式之3
java202303java学习笔记第二十七天-正则表达式之3
42 0
|
开发者 Python
正则表达式4|学习笔记
快速学习正则表达式4
正则表达式4|学习笔记