grep用法简介之二

上一篇文章总结了一些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 kB
2、显示/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/nologin
3、显示/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之间的整数
[root@client ~]# 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

你可能感兴趣的:(linux,正则表达式,grep)