目录:

 一、简介

 二、grep详解

  1.grep用法及常用选项

  2.正则表达式

   2.1正则表达式简介和分类

   2.2基本正则表达式在grep中的作用

   2.3grep示例

   2.4扩展正则表达式在egrep的作用

   2.5egrep示例

   2.6其他


一、简介

grepGloballysearch a Regular Expression and Print)是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。

grep是有家族的,家族成员如下:

  1grep,默认支持基本正则表达式

  2egrep,支持扩展正则表达式

  3fgrep,不支持正则表达式,搜索字符串的速度快


二、grep详解

 1.grep用法及常用选项

grep  [options] ‘pattern’  FILE
常用选项(options):
  -v:反向选取,只显示不符合模式的行
  -o:只显示被模式匹配到的字串,而不是整个行
  -i:不区分字符大小写
  -A n:显示匹配到的行时,顺带显示其后面的n行
  -B n:显示匹配到的行时,顺带显示其前面的n行
  -C n:显示匹配到的行时,顺带显示其前后的n行
  -E:使用扩展的正则表达式,相当于 egrep

 2.正则表达式

  2.1正则表达式的分类

   正则表达式是一类字符所书写的模式(pattern),该类字符被称为元字符,它不表示字符本身的意义,而用于额外功能性的描述。

 正则表达式分为两种,分别是基本正则表达式和扩展正则表达式。

2.2基本正则表达式在grep的作用

 注意:基本正则表达式默认是工作在贪婪模式(尽可能长地去匹配符合模式的内容)

^ :锚定行首符合条件的内容,用法格式 ”^pattern”
$ :锚定行尾符合条件的内容,用法格式 ”pattern$”
^$:两项结合可以匹配空白行
. :匹配任意单个字符
* :匹配紧挨在其前面的字符任意次
.*:匹配任意长度的任意字符
[] :匹配指定范围内的任意单个字符
[^] :匹配指定范围外的任意单个字符
\? :匹配紧挨在其前面的字符0次或1次
\{m\}  :精确匹配m次
\{m,\} :匹配至少m次
\{m,n\} :匹配其前面的字符至少m次,至多n次
\< :锚定词首,用法格式 --> \<pattern
\> :锚定词尾,用法格式 --> pattern\>
\(\):分组,用法格式 --> \(pattern\)
 
相关字符集合:
[:digit:] : 所有数字, 相当于0-9
[:lower:] : 所有的小写字母
[:upper:] : 所有的大写字母
[:alpha:] : 所有的字母
[:alnum:] : 相当于[0-9a-zA-Z]
[:space:] : 空白字符
[:punct:] : 所有标点符号

  2.3grep示例

  (1)匹配/etc/passwd包含‘root’字符串的行

#  grep --color=auto 'root' /etc/passwd

  (2)匹配/etc/passwd‘root’字符串开始的行

# grep --color=auto'^root' /etc/passwd

  (3)匹配/etc/passwd‘bash’字符串结尾的行

# grep --color=auto 'bash$' /etc/passwd

  (4)查找/etc/rc.d/rc.sysinit中有多少个空白行

# grep"^$" /etc/rc.d/rc.sysinit | wc -l

  (5)匹配grep.txt中符合任意个a后面跟着个b的行

#grep --color=auto "a*b" grep.txt

  (6)匹配/etc/passwd字符r后面跟着任意个字符之后紧跟着字符h的行

# grep --color=auto"r.*h" /etc/passwd

  (7)匹配/etc/passwd以字符r开头后面跟着任意个字符之后紧跟着以字符h结尾的行

# grep --color=auto"^r.*h$" /etc/passwd

  (8)匹配/etc/passwd字符r后面跟着个数字再跟着任意个字符再紧跟着字符h的行

# grep"r[0-9].*h" /etc/passwd

  (9)匹配grep.txt出现0次或1次个a后面跟着个b的行

# grep"a\?b" grep.txt

  (10)匹配grep.txt出现3a后面跟着个b的行

# grep --color=auto “a\{3\}b” grep.txt

  (11)显示/etc/rc.d/rc.sysinit#开头,且后面跟一个或多个空白字符,而后又跟了任意非空白字符的行

# grep --color=auto ^#[[:space:]]\{1,\}[^[:space:]]/etc/rc.d/rc.sysinit

  (12)显示/etc/rc.d/rc.sysinit中符合形为“任意单个字符n任意字符任意单个字符n”模式的行;即任意单个字符后面跟了个nn后面有任意长度的任意字符,而后是任意单个字符后面跟了个n,但后面的n之前的字符要与前面的n之前的字符相同

# grep --color=auto “\(.n\).*\1” /etc/rc.d/rc.sysinit

  (13)显示/etc/rc.d/rc.sysinitboo为词首的单词

# grep --color=auto “\<boo” /etc/rc.d/rc.sysinit

  2.4扩展正则表达式在grep的作用

^ :锚定行首的符合条件的内容,用法格式 ”^pattern”
$ :锚定行尾的符合条件的内容,用法格式 ”pattern$”
. :匹配任意单个字符
[ ] :匹配指定范围内的任意单个字符
[^] :匹配指定范围外的任意单个字符
* :匹配紧挨在其前面的字符任意次
+ :匹配其前面的字符至少1次
? :匹配紧挨在其前面的字符0次或1次
{m,n} :匹配其前面的字符至少m次,至多n次
( ) :分组
a|b:二选一
\< :锚定词首,用法格式--> \<pattern
\> :锚定词尾,用法格式--> pattern\>

 2.5egrep示例

 (1)匹配grep.txta出现1次以上后面跟着个b的行

# egrep--color=auto “a+b” grep.txt

 (2)匹配grep.txta出现0次或者1次后面跟着个b的行

# egrep--color=auto ”a?b“ grep.txt

 (3)匹配/proc/cpuinfovendor或者stepping的行

# egrep--color=auto "(vendor|stepping)" /proc/cpuinfo

 2.6其他

  在egrep中其他和grep相同用法的正则匹配就不在这里演示了。关于命令的相关选项请找man文档。