正则表达式与例题

正则表达式与例题

 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、利用dfegrep,取出磁盘各分区利用率,并从大到小排序

l  [root@localhost ~]# df |grep ^/dev/sd|egrep -o “\b[[:digit:]]{1,3}\b%”|sort
-rn

l  31%

l  18%

l  1%

10、显示三个用户rootmagewangUID和默认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-199200-249 250-255

0-9  ;【1-9】【0-9】;   10-9】【0-9 20-4】【0-9】;  250-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

(0)
TouchTouch
上一篇 2017-07-29
下一篇 2017-07-29

相关推荐

  • 企业实时同步方案—-Rsync+Sersync

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://nolinux.blog.51cto.com/4824967/1433623     在博文企业实时同步方案—-Sersync介绍中我们详细介绍了Sersync的原理,设计架构以及…

    Linux干货 2015-03-30
  • iptables练习

    系统的INPUT和OUTPUT默认策略为DROP; 1、限制本地主机的web服务器在周一不允许访问;新请求的速率不能超过100个每秒;web服务器包含了admin字符串的页面不允许访问;web服务器仅允许响应报文离开本机; 系统默认策略设定: ~]# iptables -P INPUT DROP ~]# iptables -P OUPUT DROP 网络说明…

    Linux干货 2016-12-27
  • 文本查看、处理工具的应用及组、用户的相关操作

            一、列出当前系统上所有已经登录的用户的用户名,注意:同一个用户登录多次,则只显示一次即可      查看已经登录的用户用“who”命令,为了试验我用root多登录了几次。    &nb…

    2017-07-16
  • 网络管理2

    六、配置网络     跨网络通信:路由     路由分类:         主机路由         网络路由 &nbs…

    Linux干货 2016-09-09
  • N27网络班第6周作业

    1、复制/etc/rc.d/rc.sysinit文件至/tmp目录,将/tmp/rc.sysinit文件中的以至少一个空白字符开头的行的行首加#; :%s@^[[:space:]]\+@#&@g 2、复制/boot/grub/grub.conf 至/tmp目录中,删除/tmp/grub.conf文件中的行首的空白字符 :%s@^[[:space:]]…

    Linux干货 2017-09-03
  • Linux第三周总结

    1、列出当前系统上所有已经登录的用户的用户名,注意:同一个用户登录多次,则只显示一次即可。 ~]# who | cut -d ” -f1 | uniq 2、取出最后登录到当前系统的用户的相关信息。 ~]# who|tail -1 3、取出当前系统上被用户当作其默认shell的最多的那个shell ~]# cut -d’:’…

    2017-07-16