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]" :被匹配的模式需要加上双引号或单引号
2.显示/proc/meminfo文件中不以大小写s开头的行
-v 是取反的意思
grep -v --color=auto "^[Ss]" /proc/meminfo
3.显示/proc/meminfo文件中以大小写s开头的字符
-o
grep -o --color=auto "^[Ss]" /proc/meminfo
4.显示/proc/meminfo文件中以大小写s开头的行
-i
grep --color=auto -i "^s" /proc/meminfo
5.显示/proc/meminfo文件中以大小写s开头的行的前一行
-A#(#为指定行数)
-B#(#为指定行数),指定行数的前#行
-C#(#为指定行数),C包含A和B
grep --color=auto -A1 -i /proc/meminfo
6.取出默认shell为非bash的用户信息
grep --color=auto -v "bash\>" /etc/passwd
7.显示/boot/grub/grub.conf中以至少一个空白字符开头的行
grep --color=auto "^[[:space:]]\{1,\}" /boot/grub/grub.conf
egrep --color=auto "^[[:space:]]{1,}" /boot/grub/grub.conf
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
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]))"