上一篇文章总结了一些grep基本用法。在这次的内容里介绍grep和正则表达式结合使用的方法。
-
首先介绍下正则表达式,正则表达式非基本和扩展两种。
名词释义:正则表达式:正则表达式其实就是描述某些复杂规则字符串的代码集合。
元字符:在正则表达式中具有特殊意义的专用字符
-
正则表达式
基本正则表达式元字符:
^ :表示行首
$ :表示行尾
^$:表示空白行
* :表示星之前字符的0个或任意个字符,例如:a*:表示0个a或任意一个a的字符,所以就是全显示出来了。
. :表示任意单个字符
[ ] :表示匹配指定范围内的任意单个字符,例如:[a-z],[A-Z],[0-9]
[^] :括号中的^表示取反
\? :表示紧挨在?前面的字符的0次或1次
\{m,n\}:匹配其前面的字符,至少M次至多N次,例如: 0到3次:\{0,3\},至少3次,至多不限:\{3,\},精确匹配M次:\{m\}
\< :锚定单词词首
\>:锚定单词词尾
\(\):分组功能,即把括号中的字符当初一个字符来匹配,例如:\(ab\)\{3\}:结果就是包含“ababab”才能匹配, \(a.b\).*\1: 其中的\1表示引用了“\(a.b\)
扩展正则表示元字符:
扩展正则表达式
+:表示匹配前面的字符至少1次
():分组,不需要转义符,支持引用\1,\2
|:表示与(c|C)
{m,n}:不需要转义符,至少m次最多n次
-
用法举例:
1、显示/proc/meminfo文件中以不区分大小的s开头的行
#grep "^[Ss]" /proc/meminfo
SwapCached: 0 kB SwapTotal: 4095992 kB SwapFree: 4095992 kB Shmem: 3468 kB Slab: 118580 kB SReclaimable: 57644 kB SUnreclaim: 60936 kB2、显示/etc/passwd中以nologin结尾的行
# grep "nologin$" /etc/passwd bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin adm:x:3:4:adm:/var/adm:/sbin/nologin lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin mail:x:8:12:mail:/var/spool/mail:/sbin/nologin uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin operator:x:11:0:operator:/root:/sbin/nologin games:x:12:100:games:/usr/games:/sbin/nologin gopher:x:13:30:gopher:/var/gopher:/sbin/nologin ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin nobody:x:99:99:Nobody:/:/sbin/nologin dbus:x:81:81:System message bus:/:/sbin/nologin3、显示/etc/rc.d/rc.sysinit中以#开头,且后面跟一个或多个空白字符,而后又跟了任意非空白字符的行
#grep "^#[[:space:]]\{1,\}[^[:space:]]" /etc/rc.d/rc.sysinit # /etc/rc.d/rc.sysinit - run once at boot time # Taken in part from Miquel van Smoorenburg‘s bcheckrc. # Check SELinux status # Print a text banner. # Only read this once. ...ps: [:space:]表示空格4、找出ifconfig命令结果中的1-255之间的整数
[[email protected] ~]# ifconfig | grep -o -E "\<([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\>" 29 71 10 101 10 255 255 255 255 64 1 13 2 5 4 ...5、找出ifconfig命令结果中的ip地址
ifconfig | egrep -o --color=auto "\<([0-9]{1,2}|1[0-9]{2}|2[0-5]{2})\.([0-9]{1,2}|1[0-9]{2}|2[0-5]{2})\.([0-9]{1,2}|1[0-9]{2}|2[0-5]{2})\.([0-9]{1,2}|1[0-9]{2}|2[0-5]{2})\>" 10.0.0.101 10.0.0.255 255.255.255.0 127.0.0.1 255.0.0.0
grep用法简介之二