一、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: pattern\b (例:/love\>/,匹配包含以love结尾的词的行) \ \(\): 分组,用法格式: \(pattern\) \(ab\)\{1,3\}:ab, aab, abb, abab, ababab, ab任意字符ab:ab.*ab a.b任意字符a.b: \(a.b\).*\1 3、方括号字符集: