一、grep是什么?

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

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

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

       egrep:支持扩展正则表达式;

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


二、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开头的行)

               $:锚定行尾的符合条件的内容;(例:用法格式 “love$”,匹配所以以love结尾的行)

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

                                ^$:匹配空白行

               .:匹配任意单个字符;(例:“l..e”,匹配包含一个l,后面跟两个任意字符再跟一个e的行)

               *:匹配紧挨在其前面的零个或任意个字符;(例:“*b”,ab, aab, acb, b)

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

               [  ]:匹配指定范围内的任意单个字符;(例:“[Ll]ove”,匹配Love或包含love的行)

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

               [^]:匹配指定范围外的任意单个字符;(例:“[^a-k]ove”,匹配包含一个不在a-k之间的字符,并且该字符后紧跟着ove的行)

                       例:“[a-z][A-Z][0-9]abc”,匹配一个abc前面可以跟着大小写a-z或0-9之间的任意一个字符的行;

                               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、方括号字符集:

181827193.jpg