grep + 正则表达式-实现高效查找
grep 是一个强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来
- 参数说明
用法:grep [选项]… 模式 [文件]…
在每个<文件>中查找给定<模式>,模式使用的是正则表达式,最好使用单引号将它包含起来,这样可以避免shell的元字符对他的影响
-a: 将二进制文档以文本方式处理
-c: 显示匹配行的数目
-n: 输出的同时显示行号
-i: 忽略大小写
-A: 即After,显示匹配行后n行
-B: 即Before,显示匹配行前n行
-v: 表示反选
-h: 查询多文件时不显示文件名
-E: 扩展正则表达式,虽然一般情况下,基本正则表达式就够用了。特殊情况下,复杂的扩展表达式,可以简化字符串的匹配
–color: 以特定颜色高亮显示匹配关键字
为避免搜索时每次都加–color参数,可以使用下列命令来永久添加该参数,
vim ~/.bashrc
alias grep='grep --color=auto'//在.bashrc文件中添加这句话,然后保存退出,在执行下条命令即可
source ~/.bashrc
- 正则表达式
^ | 锚定行的开始 如:’^grep’匹配所有以grep开头的行 |
---|---|
$ | 锚定行的结束 如:'grep$'匹配所有以grep结尾的行 |
* | 匹配0个或多个向前符号,如’gr*p’匹配到的可能是gp,grp,grrp,grrrp等 |
. | 匹配任意一个非换行符的字符,如’g.rp’匹配到的是g后接任意一个字符,然后是rp,如garp,gorp等 |
[] | 匹配一个指定范围内的字符,如’[gh]rep’匹配到的是grep和hrep |
[^] | 匹配不在该指定范围内的字符如’[^a-z]'表示匹配不包含小写字母的行 |
\< | 匹配单词的开始,如’\<grep’表示匹配以grep开头的单词的行 |
\> | 匹配单词的结尾,如’tion\>'表示匹配以tion结尾的单词的行 |
x\{m\} | 重复字符x,m次,如:'df{5}'匹配包含5个f的行 |
x\{m,\} | 重复字符x,至少m次,如:'df{5,}'匹配至少有5个f的行 |
\w | 匹配文字和数字字符,也就是[A-Za-z0-9],如:'G\w*p’匹配以G后跟零个或多个文字或数字字符,然后是p |
\b | 单词锁定符,如: '\bgrep\b’只匹配grep |
? | 类似*,匹配0个或1个向前的字符,是懒惰模式的,贪婪模式下会尽量匹配最长的字符串,而懒惰模式会尽量匹配最短的字符串 |
- grep实例
1.匹配包含’scan‘的行,并显示行号
grep -n 'scan' *.txt
2.显示包含‘scan’或‘Scan’行的行数
grep -c -i 'scan' *.txt
3.匹配以s开头,至少包含1个c,紧跟的是an的行
grep 'sc\{1,\}an' *.txt
4.匹配以sc开头,中间跟着任意2个数字,并且以.txt结尾的行
grep '^sc[0-9]\{2\}.txt$' *.txt
5.匹配不包含sacn的行,并显示行号
grep -v -n 'scan' *.txt
6.匹配以s开头,并且以tion结尾的单词
grep '\<s.*tion\>' *.txt