一、grep是什么?

       grep全称:Global search Regular Exmpression and Printing ,grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来,它的使用权限是所有用户。

       我们 man grep可以看到,NAME行下有:grep, egrep, fgrep, rgrep 等,这些都是打印行跟匹配模式的命令。这几个之间还有点区别的,比如:

       grep: 默认支持基本正则表达式;




二、grep的用法

       在man文档的概要中可以看到grep的基本用法:grep  [OPTIONS]  PATTERN  [FILE...],

       1、grep的常用选项(options):

               -v:反向选取,只显示不符合模式的行;

-o:只显示被模式匹配到的字串,而不是整个行;

               -i:比较时不区分字符的大小写(即认为字母大小写相等);

               -c:显示匹配到行的数目,而不显示行的内容;(例:ps aux | grep mysql -c)

               -n:在每一行前面加上它在文件中对应的行号;(例:ps aux | grep mysql -n)


               -A n:显示匹配到的行时,顺带显示其后面的n个行;(-A 2)

-B n:显示匹配到的行时,顺带显示其前面的n行;

-C n:显示匹配到的行时,顺带显示其前后的n行;

           

               -E: 使用扩展的正则表达式 (grep -E = egrep)

               --color = auto   被匹配到的高亮显示

               export GREP_COLOR='01;(31-37)',调整被匹配到的内容的高亮颜色(前景色、背景色)

               用法:export GREP_COLOR='01;31',红色


       2、基本正则表达式(pattern部分):贪婪模式(尽可能长地去匹配符合模式的内容)

               ^:锚定行首的符合条件的内容;(例:用法格式 “^love”,匹配所有以love开头的行)


                       例: ^pattern$:用法“^love$”,只匹配love的行




                       例:“.*”:匹配任意长度的任意字符



               [x-y]:匹配指定范围内的一个字符;(例:“[a-z]ove”,匹配一个从a-z之间的字符,并且该字符后跟着ove的行)



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

               \:用来转义元字符;(例:/love\。/,匹配包含love后面跟一个句号。)

               \?: 匹配紧挨在其前面的字符0次或1次;(例:a\?b:ab, aab, acb, b)

\{m,n\}:匹配其前面的字符至少m次,至多n次;

\{0,n\}:至多n次;0-n次;

\{m,\}:至少m次;

\{m\}:精确匹配m次;

                           例:a\{1,3\}b: b, ab, aab, aaab, aaaaaab, acb       grep "[bB].\{2,5\}[tT]": Boot, B123T, bxy12T

\<: 锚定词首,用法格式:\<pattern   \b: \bpattern (例:/\<love/,匹配包含以love开头的词的行)

\>:锚定词尾,用法格式:pattern\>  \b: pattern\b   (例:/love\>/,匹配包含以love结尾的词的行)

\<pattern\>:锚定单词  (例:/\<love\>/,匹配包含love的行)

\(\): 分组,用法格式: \(pattern\)

\(ab\)\{1,3\}:ab, aab, abb, abab, ababab,

ab任意字符ab:ab.*ab

a.b任意字符a.b: \(a.b\).*\1

       3、方括号字符集:

grep 后缀_数据库