正则表达式与例题
一BRE 和ERE
由一类特殊字符及文本字符所编写的模式,其中有些字符(元字符)不表示字符字面意义,而表示控制或通配的功能
程序支持:grep ;sed ; awk ; vim ; less ; nginx ; varnish
元字符分类:字符匹配 匹配次数 位置锚定 分组
二.基本正则表达式元字符
1. 匹配任意单个字符
2.[] 匹配指定范围内的任意单个字符
3. [^] 匹配指定范围外的任意单个字符
4. [:alnum:] 字母和 数字
5. [:alpha:] 代表任何英文大小写字符,亦即 A-Z, a-z
6. [:lower:] 小写字母 [:upper:] 大写字母
7. [:blank:] 空白字符(空格和制表符)
8. [:space:] 水平和垂直的空白字符(比[:blank:] 包含的范围广)
9. [:cntrl:] 不可打印的控制字符(退格、删除、警铃…) )
10. [:digit:] 字 十进制数字 [:xdigit:] 十六进制数字
11.[:graph:] 可打印的非空白字符
12. [:print:] 可打印字符
13. [:punct:] 标点符号
三.正则表达式
* 匹配 前面的字符任意次,包括0次 次
贪婪模式:尽可能长的匹配
.* 任意 长度的任意字符
\? 匹配 其前面的字符0 或1次 次
\+ 匹配 其前面的字符至少1次 次
\{n\} 匹配 前面的字符n次 次
\{m,n\} 匹配 前面的字符至少m 次,至多n次 次
\{,n\} 匹配 前面的字符至多n次 次
\{n,\} 匹配 前面的字符至少n次
位置锚定:定位出现的位置
^ 行首锚定,用于模式的最左侧
$ 行尾锚定,用于模式的最右侧
^PATTERN$ 用于模式匹配整行
^$ 空行
^[[:space:]]*$ 空白行
\< 或 或 \b 词首锚定,用于单词模式的左侧
\> 或 或 \b 词尾锚定;用于单词模式的右侧
\<PATTERN\>
四.例题(红色圆点代表答案,蓝色代表输入的命令)
1、显示/proc/meminfo文件中以大小s开头的行:(要求:使用两种方式)
l [root@localhost
~]# cl
l [root@localhost ~]# egrep -i ^s /proc/meminfo
l SwapCached: 0 kB
l SwapTotal: 3905532 kB
l SwapFree: 3905532 kB
l Shmem: 11104 kB
l Slab: 123848 kB
l SReclaimable: 65544 kB
l SUnreclaim: 58304 kB
l ——————————————————————————-
l [root@localhost ~]# egrep -e ^s -e ^S /proc/meminfo
l SwapCached: 0 kB
l SwapTotal: 3905532 kB
l SwapFree: 3905532 kB
l Shmem: 11104 kB
l Slab: 123848 kB
l SReclaimable: 65544 kB
l SUnreclaim: 58304 kB
2、显示/etc/passwd文件中不以/bin/bash结尾的行:
l [root@localhost ~]# cat /etc/passwd |egrep -v
“/bin/bash”$
l bin:x:1:1:bin:/bin:/sbin/nologin
l daemon:x:2:2:daemon:/sbin:/sbin/nologin
l adm:x:3:4:adm:/var/adm:/sbin/nologin
l lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
l sync:x:5:0:sync:/sbin:/bin/sync
l shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
l halt:x:7:0:halt:/sbin:/sbin/halt
3、显示用户rpc默认的shell程序
l [root@localhost ~]# egrep ‘^rpc\>’ /etc/passwd |cut
-d: -f7
l /sbin/nologin
4、找出/etc/passwd中的两位或三位数
l [root@localhost ~]# egrep “[[:digit:]]{2,3}”
/etc/passwd
l mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
l operator:x:11:0:operator:/root:/sbin/nologin
l games:x:12:100:games:/usr/games:/sbin/nologin
l ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
l nobody:x:99:99:Nobody:/:/sbin/nologin
5、显示centos7的/etc/grub2.cfg文件中,至少以一个空白字符开头的且后面存非空白字符的行
l [root@localhost ~]# egrep
“^[[:space:]]+[^[:space:]]” /etc/grub2.cfg
l load_env
l set default=”${next_entry}”
l set next_entry=
l save_env next_entry
l set boot_once=true
l set default=”${saved_entry}”
l menuentry_id_option=”–id”
l menuentry_id_option=””
6、找出“netstat -tan” 命令的结果中以‘LISTEN‘后跟任意多个空白字符结尾的行
l [root@localhost ~]# netstat -tan | egrep
“LISTEN[[:space:]]*$”
l tcp
0 0 0.0.0.0:111 0.0.0.0:* LISTEN
l tcp
0 0 192.168.122.1:53 0.0.0.0:* LISTEN
l tcp
0 0 0.0.0.0:22 0.0.0.0:* LISTEN
l tcp
0 0 127.0.0.1:631 0.0.0.0:* LISTEN
7、显示centos7上所有系统用户的用户名和UID
l [root@localhost ~]# cut -d: -f1,3 /etc/passwd | egrep
“[1-9]{1,3}$”
l bin:1
l daemon:2
l adm:3
l lp:4
l sync:5
l shutdown:6
l halt:7
l mail:8
l operator:11
8、找出/etc/passwd用户名同shell名的行
l [root@localhost ~]# egrep “^(.*):.*\1$”
/etc/passwd
l sync:x:5:0:sync:/sbin:/bin/sync
l shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
l halt:x:7:0:halt:/sbin:/sbin/halt
l [root@localhost ~]# ^C
9、利用df和egrep,取出磁盘各分区利用率,并从大到小排序
l [root@localhost ~]# df |grep ^/dev/sd|egrep -o “\b[[:digit:]]{1,3}\b%”|sort
-rn
l 31%
l 18%
l 1%
10、显示三个用户root、mage、wang的UID和默认shell
l [root@localhost ~]#
egrep “^(root|mage|wang)\>” /etc/passwd | cut -d: -f3,7
l 0:/bin/bash
l [root@localhost
~]#
11、找出/etc/rc.d/init.d/functions文件中行首为某单词(包括下划线)后面跟一个小括号的行
l [root@localhost ~]# egrep -o
^”[_[:alpha:]]+\(\)” /etc/rc.d/init.d/functions
l checkpid()
l __kill_pids_term_kill_checkpids()
l __kill_pids_term_kill()
l __pids_var_run()
l __pids_pidof()
l daemon()
l killproc()
12、使用egrep取出/etc/rc.d/init.d/functions中其基名。
l [root@localhost ~]# echo
“/etc/rc.d/init.d/functions”|egrep -o “[^/]+$”
l Functions
13、使用egrep取出上面的路径的目录名。
l [root@localhost ~]# echo
“/etc/rc.d/init.d/functions”|egrep -o “^.*/”
l /etc/rc.d/init.d/
14、统计last命令中以root登录的每个主机IP地址登录次数
l [root@localhost ~]# last
| egrep -o “^root\>.*[0-9]\.[0-9]{1,3}” |tr -s ” ”
“%”|cut -d% -f3|uniq -c
l 18 172.17.250.182
l 1 172.17.254.44
l 2 172.17.254.176
l 2 172.17.250.182
l 1 172.18.250.76
l 2 172.17.254.44
l 8 172.17.250.182
15、利用扩展正则表达式分别表示0-9 、10-99 、100-199、200-249 、250-255
【0-9】 ;【1-9】【0-9】; 1【0-9】【0-9】 ; 2【0-4】【0-9】; 25【0-5】
16、显示ifconfig 命令结果中所有IPv4 地址
l [root@localhost ~]#
ifconfig | egrep -o “([0-9]{1,3}\.){3}[0-9]{1,3}”
l 172.17.252.64
l 255.255.0.0
l 172.17.255.255
l 172.17.252.65
l 255.255.0.0
l 172.17.255.255
l 127.0.0.1
l 255.0.0.0
l 192.168.122.1
l 255.255.255.0
17、将此字符串:welcome to magedu linux 中的每个字符去重并排序,重复次数多的排到前面
l [root@localhost ~]# echo
“welcome to magedu linux” |
egrep -o “[[:alpha:]]” |
sort | uniq -c | sort -nr
l 3 e
l 2 u
l 2 o
l 2 m
l 2 l
l 1 x
l 1 w
l 1 t
l 1 n
l 1 i
l 1 g
l 1 d
l 1 c
l 1 a
原创文章,作者:Touch,如若转载,请注明出处:http://www.178linux.com/83141