目录:

 一、简介

 二、grep详解

  1.grep用法及常用选项

  2.正则表达式

   2.1正则表达式简介和分类

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

   2.3grep示例

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

   2.5egrep示例

   2.6其他


一、简介

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

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

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

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

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


二、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示例
/etc/passwd中包含‘root’字符串的行
 
  
#  grep --color=auto 'root' /etc/passwd
 
  
匹配/etc/passwd中以‘root’字符串开始的行
 
  
# grep --color=auto'^root' /etc/passwd
 
  
匹配/etc/passwd中以‘bash’字符串结尾的行
 
  
# grep --color=auto 'bash$' /etc/passwd
 
  
查找/etc/rc.d/rc.sysinit中有多少个空白行
 
  
# grep"^$" /etc/rc.d/rc.sysinit | wc -l
 
  
匹配grep.txt中符合任意个a后面跟着个b的行
 
  
#grep --color=auto "a*b" grep.txt
 
  
匹配/etc/passwd中字符r后面跟着任意个字符之后紧跟着字符h的行
 
  
# grep --color=auto"r.*h" /etc/passwd
 
  
匹配/etc/passwd中以字符r开头后面跟着任意个字符之后紧跟着以字符h结尾的行
 
  
# grep --color=auto"^r.*h$" /etc/passwd
 
  
匹配/etc/passwd中字符r后面跟着个数字再跟着任意个字符再紧跟着字符h的行
 
  
# grep"r[0-9].*h" /etc/passwd
 
  
匹配grep.txt中出现0次或1次个a后面跟着个b的行
 
  
# grep"a\?b" grep.txt



匹配grep.txt中出现3次a后面跟着个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



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


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



显示/etc/rc.d/rc.sysinit以boo为词首的单词



# 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示例

匹配grep.txt中a出现1次以上后面跟着个b的行



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



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


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



 (3)匹配/proc/cpuinfo中有vendor或者stepping的行

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


 2.6其他

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





转载于:https://blog.51cto.com/gzguitar/1833254