linux指令-grep
grep命令,全称(Global Regular Expression Print,表示全局正则表达式版本),用来做文本匹配十分厉害,堪称神器。
命令格式
| 1 | grep [option] pattern file | 
参数
这里有一个测试文件,内容为:
| 1 | aaaaaaaaaaaaaaaa | 
| 参数 | 作用 | 演示 | 
|---|---|---|
| -a | 对二进制数据也匹配 | 无 | 
| -A <count> | 除了显示匹配到的内容,还显示他之后的几行内容 |  | 
| -b | 显示出之前匹配到了多少 |  | 
| -B <count> | 除了显示匹配到的内容,还显示他之前的几行内容 | 无 | 
| -c | 计算符合样式的行数 |  | 
| -C <count> | 把-B和-A整合了 |  | 
| -f file | 从文件中读取要匹配的文本 |  | 
| -n | 显示匹配到的文本行号 |  | 
| 无 | 从多个文件中查找 |  | 
| -i | 忽略大小写 |  | 
| -v | 显示不包含匹配项的行 |  | 
| -E | 联合使用 |  | 
| -l | 只显示匹配到的文件名,不显示匹配到的内容 | |
| -s | 不显示关于不存在或者无法读取文件的错误信息 | |
| -q | 禁止输出任何匹配结果,而是以退出码的形式表示搜索是否成功,其中0表示找到了匹配的文本行(与echo $? 连用) | |
| -r | 递归查找当前文件夹 | 
| 1 | # 递归查找当前文件夹以及子文件夹下包含pattern的文件 | 
表达式规则
| 规则 | 含义 | 
|---|---|
| ^ | 指定开头 | 
| $ | 指定结尾 | 
| . | 任意一个非换行字符 | 
| * | 一个或多个前一个出现的字符 | 
| [] | 匹配一个指定范围内的字符,如’[Gg]rep’匹配Grep和grep | 
| [^] | 匹配一个不在指定范围内的字符,如:’[^A-FH-Z]rep’匹配不包含A-R和T-Z的一个字母开头,紧跟rep的行。 | 
| \(..\) | 标记匹配字符,如’(love)‘,love被标记为1 | 
| \< | 锚定单词的开始,如:’<grep’匹配包含以grep开头的单词的行,类似于^ | 
| \> | 锚定单词的结束,如’grep>‘匹配包含以grep结尾的单词的行,类似于$ | 
| x\{m\} | 重复字符x,m次,如:’0{5}‘匹配包含5个o的行。 | 
| x\{m,\} | 重复字符x,至少m次,如:’o{5,}‘匹配至少有5个o的行。 | 
| x\{m,n\} | 重复字符x,至少m次,不多于n次,如:’o{5,10}‘匹配5–10个o的行。 | 
| \w | 匹配字母和数字字符,也就是[A-Za-z0-9],如:’G\w*p’匹配以G后跟零个或多个文字或数字字符,然后是p。 | 
| \W | \w的反置形式,匹配一个或多个非单词字符,如点号句号等。 | 
| \b | 单词锁定符,如: ‘\bgrep\b’只匹配grep。 | 
| [[:alnum:]] | 文字数字字符 | 
| [[:alpha:]] | 文字字符 | 
| [[:digit:]] | 数字字符 | 
| [[:graph:]] | 非空字符(非空格、控制字符) | 
| [[:lower:]] | 小写字符 | 
| [[:cntrl:]] | 控制字符 | 
| [[:print:]] | 非空字符(包括空格) | 
| [[:punct:]] | 标点符号 | 
| [[:space:]] | 所有空白字符(新行,空格,制表符) | 
| [[:upper:]] | 大写字符 | 
| [[:xdigit:]] | 十六进制数字(0-9,a-f,A-F) |