1.grep是什么?

   grep全称是Global search regular expression and print out the line,全局搜索正则表达式,简称grep,它能根据用户指定的文本模式对目标文件进行逐行搜索,并打印(搜索,删除,替换)能够被模式匹配的行。常见的有grep,Egrep,Fgrep,而Egrep可以使用grep -E命令实现,Fgrep可以使用grep -F来实现。这里只介绍grep和Egrep,Egrep比起grep相差并不大,Egrep的功能比grep强大一点点,还有一点使用格式上的区别,而能用grep实现的都能用Egrep实现,反之亦然。

2.如何使用?

   grep的使用格式是

       grep [options] PATTERN file...

       (egrep [options] PATTERN file...)

       grep的常用选项有:

                       -v:取反,显示不能被模式匹配到的行

                       -o:仅显示被模式匹配到的字符,而不是显示整行

                       -i:不区分模式匹配中的大小写字母

                       -E:就是egrep啦!!!

                       -A#:(after)显示被模式匹配到的后#行,如-A2,则取被模式匹配到的当前行的后两行

                       -B#:(before),同上

                       -C#:(after and before),同上

   gerp和egrep的区别如下,颜色不同的为他们的区别:


模式说明gerp模式标志Egerp模式标志
匹配任意单个字符.(英文标点).(英文标点)
匹配中括号里面的任意单个字符[]如:[abc],匹配abc中的任意一个[]如:[abc],匹配abc中的任意一个
匹配中括号里面以外的任意单个字符[^]如:[^abc],不匹配abc[^]如:[^abc],不匹配abc

匹配其前一个字符任意次

*如:x*y,表示x和y之间出现

*如:x*y,表示x和y之间出现

匹配任意长度的任意字符.*如:x.*y,表示x和y中间出现任意改字符.*如:x.*y,表示x和y中间出现任意改字符
匹配其前面的字符一次或0次\?如:x\?y,表示xy或y?如:x?y,表示xy或y
精确匹配前面字符出现的次数\{m\}如:a\{5\},匹配5次a{m}如:a{5},匹配5次a
最少匹配前面字符出现的次数\{m,\}如:a\{5,\},最少匹配5次a
{m,}如:a{5,},最少匹配5次a
最多匹配前面字符出现的次数\{0,n\}如:a\{0,5},最多匹配5次a{0,m}如:a{0,5},最多匹配5次a
分别最少和最多匹配前面字符出现的次数\{m,n\}如:a\{3,5\},最少匹配3次a,最多匹配5次a{n,m}如:{3,5},前面的字符至少出现3次,最少出现5次
^锚定行首^root,以root开头的行^root,以root开头的行
$锚定行尾bash$,以bash结尾的行bash$,以bash结尾的行
锚定词首\<,如:\<a,只能以a开头的单词,单词在这里的意思是以a开后面跟任意字母或数字,以空格或标点结束的,为一个单词,并不是英文中所说的单词\<,如:\<a,只能以a开头的单词,单词在这里的意思是以a开后面跟任意字母或数字,以空格或标点结束的,为一个单词,并不是英文中所说的单词
锚定词尾\>,如:a\>,以a结尾的单词\>,如:a\>,以a结尾的单词
分组\(a,b\)主要用于后向引用(ab)主要用于后向引用
后向引用\number,如:\(ab\)*xy\1,引用第一个括号中的内容\number,如:(ab)*xy\1,引用第一个括号中的内容
+:匹配前面的字符最少一次不能使用该模式如:a+b,至少匹配a一次
|:或者不能使用该模式如:a|b,a或者b
空白,包括空格键和tab建的空白[[:space:]][[:space:]]
数字[[:digit:]]或者[0-9][[:digit:]]或者[0-9]

    3.实际示例:

1.显示/proc/meminfo文件中以大小写s开头的行

   命令:grep --color=auto "^[Ss]" /proc/meminfo

注意:--color=auto 是指定颜色的,这样看比较方便,"^[Ss]" :被匹配的模式需要加上双引号或单引号

Linux:grep和Egrep详解_正则表达式

2.显示/proc/meminfo文件中不以大小写s开头的行

   -v 是取反的意思

   grep -v --color=auto "^[Ss]" /proc/meminfo

Linux:grep和Egrep详解_Egerp_02

3.显示/proc/meminfo文件中以大小写s开头的字符

   -o

   grep -o --color=auto "^[Ss]" /proc/meminfo

Linux:grep和Egrep详解_Egerp_03

4.显示/proc/meminfo文件中以大小写s开头的行

   -i

   grep --color=auto -i "^s" /proc/meminfo

Linux:grep和Egrep详解_gerp_04

5.显示/proc/meminfo文件中以大小写s开头的行的前一行

   -A#(#为指定行数)

   -B#(#为指定行数),指定行数的前#行

   -C#(#为指定行数),C包含A和B

   grep --color=auto -A1 -i /proc/meminfo

Linux:grep和Egrep详解_Egerp_05

6.取出默认shell为非bash的用户信息

   grep --color=auto -v "bash\>" /etc/passwd

Linux:grep和Egrep详解_gerp_06

7.显示/boot/grub/grub.conf中以至少一个空白字符开头的行

   grep --color=auto "^[[:space:]]\{1,\}" /boot/grub/grub.conf

   egrep --color=auto "^[[:space:]]{1,}" /boot/grub/grub.conf

Linux:grep和Egrep详解_Linux_07

8.找出/etc/passwd中文件中一位数或两位数

   grep --color=auto "\<[0-9]\{1,2\}" /boot/grub/grub.conf

   egrep --color=auto "\<[0-9]{1,2}" /boot/grub/grub.conf

Linux:grep和Egrep详解_Linux_08

9.写一个模式,能匹配真正意义上的ip地址

ifconfig | egrep --color=auto"\<(([1-9]\.)|([1-9][0-9]\.)|(1[0-9][0-9]\.)|(2[0-1][0-9]\.)|(22[0-3]\.))(([0-9]\.)|([1-9][1-9]\.)|(1[0-9][0-9]\.)|(2[0-4][0-9]\.)|(25[0-5]\.))(([0-9]\.)|([1-9][1-9]\.)|(1[0-9][0-9]\.)|(2[0-4][0-9]\.)|(25[0-5]\.))(([1-9])|([1-9][1-9])|(1[1-9][1-9])|(2[0-4][0-9])|(25[0-5]))"

Linux:grep和Egrep详解_Linux_09