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