grep  (全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它只能使用基本的正则表达式来搜索文本,并把匹配的行打印出来。它的主要功能是进行字符串数据的比较,然后符合用户需求的字符串打印出来,但是主意,grep在数据中查找一个字符串时,是以“整行”为单位进行数据筛选的。

   egrep 命令等同于grep -E,利用此命令可以使用扩展的正则表达式对文本进行搜索,并把符合用户需求的字符串打印出来。

   fgrep 命令等同于grep -F,它利用固定的字符串来对文本进行搜索,但不支持正则表达式的引用,所以此命令的执行速度也最快。


一、grep命令格式及常用选项

   命令格式:grep [options] "pattern" Files

       [options]参数

       --color 匹配到的字符用高亮颜色显示出来

       -v      反向选取匹配到的内容

       -o      只显示被模式匹配到的内容

       -r      搜索多个文件时,以递归搜索

       -i      不区分字符大小写

       -A n    显示匹配到的行时,且显示其后面的n行

       -B n    显示匹配到的行时,且显示其前面的n行

       -C n    显示匹配到的行时,且显示其前面和后面的n行

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

       pattern:匹配查找文件内容的模式

二、正则表达式(分为基本正则表达式与扩展正则表达式)

  2.1 基本正则表达式(工作在贪婪模式,尽可能长的匹配符合模式的内容)

    2.1.1 元字符:

       .:    匹配任意单个字符;用法格式“a.c”

       ^:    锚定行首符合条件的内容;用法格式”^pattern”

       $:    锚定行尾符合条件的内容;用法格式”pattern$”

       *:    匹配紧挨在其前面的字符任意次;用法格式”a*b”

       .*:   匹配任意字符任意次;用法格式“a.*b”

       []:   匹配指定范围内的任意单个字符;用法格式”[a-z]”

       [^]:  匹配指定范围外的任意单个字符;用法格式”[^a-z]”

       \?:   匹配紧挨在其前面的字符0次或1次;用法格式”a\?b”

       \{0,n\}:匹配其前面的字符0次到n次;用法格式"a\{0,3\}b"

       \{m,\}: 匹配其前面的字符至少m次;用法格式 "a\{2,\}b"

       \{m,n\}:匹配其前面的字符至少m次,最多n次;用法格式“a\{1,3\}b”

       \<:锚定词首;用法格式“\<pattern”

       \>:锚定词尾;用法格式“pattern\>”

       \(\):分组匹配;用法格式“\(a.b\).*\1”

   2.1.2 简单示例:

     查看/etc/passwd文件中包含"r..t"字符的行;

144837688.jpg

     查看/etc/passwd文件中包含"root"单词的行;

144817455.jpg

     查看/etc/passwd文件中以r开头以sh结尾的行;

145237429.jpg

     找出某文件中的,1位数,或2位数;

150705758.jpg

       [:lower:]   小写字母;等同于”a-z”

       [:upper:]   大写字母;等同于”A-Z”

       [:digit:]   数字;等同于”0-9”

       [:alpha:]   大小写字母,等同于”a-zA-Z”

       [:alnum:]   大小写字母及数字;等同于”a-zA-Z0-9”

       [:space:]   空白字符

       [:punct:]   标点符号

  2.2 扩展正则表达式(egrep、grep -E) 注:在基本正则表达式基础上支持这些元字符

     2.2.1 元字符:

       ?:    匹配紧挨在其前面的字符0次或1次;用法格式”a?b”

       {m,n}:匹配其前面的字符至少m次,最多n次;用法格式“a{1,3}b”

       {m}:  精确匹配m次;用法格式“a{2}b”

       ():   分组匹配;用法格式“(a.b).*\1”

       |:    或者;用法格式”a|b”

       +:    匹配其前面的字符至少1次;用法格式“a+b”

     2.2.2 简单示例:

      显示/boot/grub/grub.conf文件中以一个或多个空白字符开头的行;

151503204.jpg

      找出ifconfig命令结果中的1-255之间的整数;

150021773.jpg

      查找/etc/rc.d/rc.sysinit中符合“任意单个字符后面跟了一个n,n后面跟了任意长度字符,而后又跟了任意单个字符后面跟了一个n”但后面的任意一个字符后跟了一个n要与前面的字符相同;

152555740.jpg