正则表达式:

正则表达式是基于样式匹配的文本处理技术的关键所在。

  1. 正则表达式的基本组成部分:

    ^ :行起始标记
    $ :行尾标记
    . :匹配任意一个(单个)字符
    [] :匹配包含在[字符]之中的任意一个字符
    [^] :匹配除[^字符]之外的任意一个字符
    [-] :匹配中指定范围内的任意一个字符
    ? :匹配之前的项1或0次
    + :匹配之前的项1次或多次
    * :匹配之前的项0或多次
    () :创建一个用于匹配的字串
    {n} :匹配之前的项n次
    {n,} :之前的项至少需要匹配n次
    {n,m} :指定之前的项所必需匹配
    | :交替匹配|两边的任意一项
    \ :转义字符可以将上面的特殊字符进行转义

  2. 案例:

    ^linux ##linux开始

wKioL1g0NBvyX1JIAABpeX2cFqM204.jpg-wh_50

   linux$ ##linux结束

wKiom1g0NEqynQS-AAA5sGtH3qc035.jpg-wh_50

  linuxfan. ##匹配linuxfans

wKiom1g0NHmBLEE1AABKkalx_Aw618.jpg-wh_50

coo[kl] ##匹配coolcook

wKioL1g0NhzT2bZNAAAyFeJKycM121.jpg-wh_50

9[^5689] ##匹配91,92等,但不匹配95,98

wKioL1g0NjqxOUEkAAA_IGfXzcM407.jpg-wh_50

[0-9] ##匹配任意一个所有的数字

wKioL1g0NjvQ1JpTAACBpHcwv2I906.jpg-wh_50

[a-z]|[A-Z] ##匹配任意一个所有大小写字母,|属于扩展正则grep -E支持

wKiom1g0NjvBr_wgAAB2nY2xkf4997.jpg-wh_50

colou?r ##匹配colorclolur,但是不能匹配colouur

wKiom1g0NjvRvpZWAAAnNeiNeM4669.jpg-wh_50

rollno-9+ ##匹配rollno-9rollno-99rollno-999,但不匹配rollno-

co*l  ##匹配clcolcoolcoool             

wKioL1g0NjyB8LkLAABMTK9AS_Y995.jpg-wh_50

ma(tri)x ##匹配matrix

wKiom1g0NjyhuKwiAAA6F2JqX9k388.jpg-wh_50

[0-9]{3} ##匹配任意一个三位数,等于[0-9][0-9][0-9]


wKioL1g0NvvCKlg-AACIl_R3-Gs109.jpg-wh_50

[0-9]{2,} ##匹配任意一个两位数或更多位的数字

wKiom1g0NvuxAH7hAACDdG2IGt8977.jpg-wh_50

[0-9]{2,5} ##匹配从两位数到五位数之间的任意一个数字

wKioL1g0NvzDu6G0AABa5C7k3Y0445.jpg-wh_50

Oct (1st | 2nd) ##匹配Oct 1stOct 2nd

wKiom1g0Nvyxxi4aAAA9N3hE4t8592.jpg-wh_50

a\.b ##匹配a.b,但不能匹配ajb

wKioL1g0NvywUAuEAABg0DHkoUY158.jpg-wh_50

[a-z0-9_]+\@[a-z0-9_]+\.[a-z]{2,4}  ##匹配一个邮箱地址

wKioL1g0Nv3Dz3amAABUi9aZpnQ462.jpg-wh_50

[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}  ##匹配IP地址

wKiom1g0Nv2CWDeCAABnCMui_U0774.jpg-wh_50

3.grep用法:


[root@ns ~]# cat /proc/meminfo |grep  -e Mem -e Cache -e Swap  ##查看系统内存、缓存、交换分区-e的作用是匹配多个表达式

wKioL1g0Nv2yUQxcAAB6UJo0AUM183.jpg-wh_50

[root@ns ~]# grep -R -o -n -E  '[a-z0-9_]+\@[a-z0-9_]+\.[a-z]{2,4}' /etc/ ##查找/etc目录下的所有文件中的邮件地址;-R递归,-n表示匹配的行号,-o只输出匹配内容,-E支持扩展正则表达式,

wKiom1g0Nv6Aod5UAAI46Wkl1l4537.jpg-wh_50

[root@ns ~]# grep -R -c 'HOSTNAME' /etc/ |grep -v "0$"  ##查找/etc/目录下文件中包含“HOSTNAME”的次数,-c统计匹配次数,-v取反

wKiom1g0Nv-yNFP7AAHgOFA96bY363.jpg-wh_50

[root@ns ~]# grep -R -l 'HOSTNAME' /etc/  ##查找包含“HOSTNAME”的文件名,-l显示匹配的文件名,-L显示不匹配的文件名

wKioL1g0NwCBfV6WAAHAy2g9oG8065.jpg-wh_50

[root@ns ~]# dmesg | grep -n --color=auto 'eth'  ##查找内核日志中eth的行,显示颜色及行号

wKioL1g0NwGhIInzAADnMIVtLqQ694.jpg-wh_50

[root@ns ~]# dmesg | grep -n -A3 -B2 --color=auto 'eth'  ## dmesg 列出核心信息,再以grep 找出内含 eth 那行,在关键字所在行的前两行与后三行也一起找出出来显示

wKiom1g0NwLTmA8GAAHxsx9lxvQ391.jpg-wh_50

[root@ns ~]# cat /etc/passwd |grep -c bash$  ##统计系统中能登录的用户的个数

wKiom1g0NwLBJQL3AAAxy-4e6XE546.jpg-wh_50

[root@ns tmp]# touch /tmp/{123,123123,456,1234567}.txt  ##创建测试文件,以下三条命令是一样的效果,匹配文件名123,可以包含1个到多个

wKioL1g0NwORJL7wAAB3_OE6uJI717.jpg-wh_50

[root@ns tmp]# ls |grep -E '(123)+'

[root@ns tmp]# ls |grep '\(123\)\+'

[root@ns tmp]# ls |egrep  '(123)+'

wKioL1g0NwPTGU_bAACze0EMqJA158.jpg-wh_50

[root@ns ~]# ps -ef |grep -c httpd  ##统计httpd进程数量

wKiom1g0NwPyg00YAAAuRNcwynM263.jpg-wh_50

[root@ns ~]# grep -C 4 'games' --color /etc/passwd  ##显示games匹配的“-C”前后4

wKiom1g0NwSgT2wbAAF0U2YQKsE702.jpg-wh_50

[root@ns ~]# grep ^adm /etc/group  ##查看adm组的信息

wKioL1g0NwSB2q7XAAA9fUJ_4HE985.jpg-wh_50

[root@ns ~]# ip a |grep -E '^[0-9]' |awk -F : '{print $2}'  ##获取网卡名称

wKiom1g0NwXx26iAAABALDSQlsk669.jpg-wh_50

[root@ns ~]# ifconfig eth0 |grep -E -o 'inet addr:[^ ]*' |grep  -o '[0-9.]*'  ##截取ip地址,[^ ]*

表示以非空字符作为结束符,[0-9.]*表示数字和点的组合

wKioL1g0NwaShX6kAABZNG_Ce2k617.jpg-wh_50

[root@ns ~]# ifconfig eth0 |grep -i hwaddr |awk '{print $5}'  ##截取MAC地址

测试文档:使用grep -E命令练习正则表达式

[root@ns tmp]# cat test.txt

ABcd

10.10.10.10

color

colur

linuxfan2

colouur

rollno-9

i like linux

linux funny.

I am linuxfan.

rollno-99

rollno-999

cl

col

cool

coool

cook

max

matrix

192.168.100.100

123456789

123123123

123123

23346123

123

12

12345

94

95

96

97

98

99

100

Oct 1st

Oct 2nd

a.b

ajb

abc

linuxfan@qq.com

linux

[root@ns tmp]#

wKioL1g0NwaC5zHEAABM_9WnVWQ170.jpg-wh_50


wKiom1g0NwbhqWIfAADX7RsGEpU439.jpg-wh_50