正则表达式及grep

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了正则表达式及grep相关的知识,希望对你有一定的参考价值。

正则表达式:

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

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

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

  2. 案例:

    ^linux ##linux开始

技术分享

   linux$ ##linux结束

技术分享

  linuxfan. ##匹配linuxfans

技术分享

coo[kl] ##匹配coolcook

技术分享

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

技术分享

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

技术分享

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

技术分享

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

技术分享

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

co*l  ##匹配clcolcoolcoool             

技术分享

ma(tri)x ##匹配matrix

技术分享

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


技术分享

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

技术分享

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

技术分享

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

技术分享

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

技术分享

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

技术分享

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

技术分享

3.grep用法:


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

技术分享

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

技术分享

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

技术分享

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

技术分享

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

技术分享

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

技术分享

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

技术分享

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

技术分享

[[email protected] tmp]# ls |grep -E ‘(123)+‘

[[email protected] tmp]# ls |grep ‘\(123\)\+‘

[[email protected] tmp]# ls |egrep  ‘(123)+‘

技术分享

[[email protected] ~]# ps -ef |grep -c httpd  ##统计httpd进程数量

技术分享

[[email protected] ~]# grep -C 4 ‘games‘ --color /etc/passwd  ##显示games匹配的“-C”前后4

技术分享

[[email protected] ~]# grep ^adm /etc/group  ##查看adm组的信息

技术分享

[[email protected] ~]# ip a |grep -E ‘^[0-9]‘ |awk -F : ‘{print $2}‘  ##获取网卡名称

技术分享

[[email protected] ~]# ifconfig eth0 |grep -E -o ‘inet addr:[^ ]*‘ |grep  -o ‘[0-9.]*‘  ##截取ip地址,[^ ]*

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

技术分享

[[email protected] ~]# ifconfig eth0 |grep -i hwaddr |awk ‘{print $5}‘  ##截取MAC地址

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

[[email protected] 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

[email protected]

linux

[[email protected] tmp]#

技术分享


技术分享





本文出自 “11982647” 博客,请务必保留此出处http://11992647.blog.51cto.com/11982647/1875565

以上是关于正则表达式及grep的主要内容,如果未能解决你的问题,请参考以下文章

grep及扩展正则表达式

grep及正则表达式

grep及正则表达式

关于 grep及正则表达式

grep命令及正则表达式

grep文本查看工具及正则表达式