1、简介

Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配到的行打印出来。grep全称是Globally search for a Regular Expression and  print  out the line,表示全局搜索正则表达式并打印匹配结果的意思。Linux下所有用户都可以使用。


2、格式


grep [option] "pattern" FILE


3、常用选项


-v:显示除匹配结果以外的所有内容

没有使用-v选项的效果:

wKioL1L8inTC500OAABrmb-nHdw674.jpg

使用-v选项后的效果:

wKiom1L8ixWyMKG1AALA6Vu-wzo568.jpg

-i:忽略大小写

wKioL1L8i3TT2DKXAAFYnSA3lcM946.jpg

-o:只显示匹配到的内容

没有使用-o选项的效果:

wKiom1L8jJTDywzpAABrmb-nHdw227.jpg

使用-o选项后的效果:

wKioL1L8jG_BBZbPAAA9COGr6yw121.jpg

--color=auto : 表示使用颜色填充匹配到的内容,使其高亮显示

wKiom1L8jMLxZKrgAABrmb-nHdw505.jpg

-A n : n为数字,表示显示匹配到内容及其后面的n行

-B n : n为数字,表示显示匹配到内容及其前面的n行

-C n : n为数字,表示显示匹配到内容及其前后的n行

正常显示效果:

wKiom1L8jajw62ixAABf4OVxpTs396.jpg

-A 1,效果:

wKiom1L8jduztA2bAACCk_NXrXM031.jpg

-B 1,效果:

wKiom1L8jgzDhGsQAAB8pg0JoZQ395.jpg

-C 1,效果:

wKioL1L8jbbR7NWDAACdEVQD40Q460.jpg

-E:等同于egrep,使用扩展的正则表达式


4、基本正则表达式元字符


^ : 表示锚定行首,格式:

‘^pattern’

wKioL1L8jyOhh-JpAAA8SewegTM892.jpg

& : 表示锚定行尾,格式:

'pattern$'

wKiom1L8j6OxVIkGAAB9dvZdb0c976.jpg

特殊用法: ^$,表示匹配空白行:


. : 表示匹配任意单个字符

wKioL1L8kvyyxJFfAABBgSz2Znc728.jpg

* : 表示匹配之前的字符任意次

   .* : 表示匹配任意长度的任意字符

wKiom1L8kzPjC5KPAAA_iH9LHc4039.jpg

[] : 表示匹配范围内任意单个内容

[^] : 表示匹配范围外任意单个内容

   

常用范围表示格式:

[0-9] : 表示所有数字 等同于 [[:digit:]]

[a-z] : 表示所有小写字母 等同于 [[:lower:]]

[A-Z] : 表示所有大写字母 等同于 [[:upper:]]

[a-zA-Z] : 表示所有字母 等同于 [[:alpha:]]

[a-zA-Z0-9] : 表示字母和数字 等同于 [[:alnum:]]

[[:graph:]] : 表示非空字符(非空格、控制字符)

[[:cntrl:]] : 表示控制字符

[[:punct:]] : 表示标点符号

[[:print:]] : 表示非空字符(包含空格)

[[:space:]] : 表示空白字符

wKioL1L9jdyC0iFtAACZTJnUxaI594.jpg

\? : 表示匹配之前的字符0次或1次

   .\? : 表示匹配任意字符0次或1次

wKioL1L8k0uSDypcAAAxmLxwieM735.jpg

\{m,n\} : 表示匹配之前的字符至少m次,最多n次

   \{0,n\} : 表示匹配之前的字符最多n次

   \{m,\}  : 表示匹配之前的字符至少m次

   \{m\}   : 表示匹配之前的字符m次

wKiom1L8k82gYUbtAADpE2zpU5o371.jpg

\< : 表示单词词首锚定,等同\b

\> : 表示单词词尾锚定,等同\b

\<word\> : 表示锚定单词,等同\bword\b

wKioL1L9lMfgxoRNAABXAGhEw9Y044.jpg


\(pattern\) : 表示分组

\(pattern\).*\1 : 表示引用前面分组内容

wKioL1L9miHy5Zk7AACzq2u_hAs237.jpg

5、egrep和grep的区别地方:

增加的元字符

+ : 表示匹配前面的字符至少一次

wKioL1L9nNuCH1iCAAB_CnY42rE152.jpg

| : 表示匹配符号两边的任意一边,比如a|b,表示匹配a或者b

wKiom1L9nXHTGnavAACetmbrn9Y699.jpg

注意,| 左右带括号和不带括号的区别


变化的元字符

? : 等同于grep中的\?,在egrep中不需要反义

() : 等同于grep中的\(\),在egrep中不需要反义

{} : 等同于grep中的\{\},在egrep中不需要反义

wKioL1L9ng6wFKxOAAB3nRj7v0M924.jpg

wKiom1L9njOhJDbNAAA0RXLCXxY990.jpg

wKiom1L9no7yAfZtAACweh_dMsI161.jpg

以上就是grep和egrep的简单用法。