Linux三剑客之grep命令
GREP是Global search Regular Expression and Print out the line 的简称,即全面搜索正则表达式并把行打印出来。其使用正则表达式进行文本搜索并把行打印出来。
grep的一般格式为: grep 选项 模式 文件,其中文件名可以有多个,输入结果只打印到屏幕,并不改变原文件
grep 命令选项及其含义
| 选项 | 含义 |
| -c | 只输出匹配行的数量 |
| -i | 搜索时忽略大小写 |
| -h | 查询多文件时不显示文件名 |
| -l | 只列出匹配的文件名,不列出具体的行 |
| -n | 列出所有匹配行并显示行号 |
| -s | 不显示不存在或无匹配的错误信息 |
| -v | 显示不包含匹配文本的所有行(反选) |
| -w | 匹配整词 |
| -x | 匹配整个行 |
| -r | 递归搜索 |
| -q | 禁止输出任何结果 |
| -b | 打印匹配行距文件头部的偏移量,以字节为单位 |
| -o | 与-b结合使用,打印匹配词距文件头部偏移量 |
| -E | 支持扩展的正则表达式 |
| -F | 不支持正则表达式 |
grep 模式非常灵活,可以式字符串、变量、正则表达式,但是无论何种模式,只要模式中包含空格,那么就需要将模式通过双引号或者单引号引起来,否则空格后面的单词会被误认为文件,例如grep “hello world” abc是正确的 grep hello world abc是错误的,可能world会被误认为也是文件名
举例:
使用grep命令同时搜索a.txt、b.txt中包含Centers单词的行(支持多个文件)

1.”-c” :表示打印匹配的行的数量,执行命令如下:

上述命名中a.txt和b.txt文件中匹配的行都是只有一行
2. “-n” : 表示列出所有匹配行并显示行号,执行命令如下:

上述命令中可以看到a.txt文件中的匹配行在第5行,b.txt匹配行在第四行
3. “-v” :表示显示不包含所有匹配模式的所有行(反选)

4.”-i” : 表示搜索的时候不区分大小写,如图:

5. “-h” : 表示查询多个文件时不显示文件名,默认情况下查询多个文件会显示文件名,使用-h后可以不显示文件名,如图:

6. “-l” : 表示只列出符合匹配的文件名,而不列出具体的行,如图:

7. “-s” :表示不显示不存在或者无匹配的错误信息,如图:

8. “-r” : 表示递归搜索,不仅搜索当前目录,还搜索子目录,如图:

9. “-w” : grep 命令支持正则表达式,但是使用-w选项后,元字符不在被解释成特殊含义,如图:

从上图中可以看到,不适用-w命令的时候,*表示通配符,可以打印出内容,使用-w命令后,*的作用不再是特殊字符,而变成普通字符,不打印内容
10. “-x” :表示匹配整行,即只有整行与模式匹配才会显示,如图:

上图中表示在a.txt文件中搜索centers的行,只有centers为单独一行的时候,才可以匹配,如果在一行的某一个部位是不会匹配的,只是独立的一行才可以
11.”-q” :加上-q选项后不在输出结果,而是以推出状态表示搜索是否成功,如果搜索成功那么退出状态0,如果搜索失败,那么退出状态1,如果命令错误或者其他错误,将返回2,如图:

上图中第一个命令,表示搜索成功,返回状态0,第二个命令搜索失败,返回状态1,第三个命令不存在d.txt文件,因此返回状态2
grep与正则结合使用的例子:
1.通过[]与grep 来实现搜索匹配行不区分大小写,如图:

POSIX 字符类
posix字符类选项及其含义
| 选项 | 意义 |
| [:upper:] | 表示大写字母[A-Z] |
| [:lower:] | 表示小写字母[a-z] |
| [:digit:] | 表示阿拉伯数字[0-9] |
| [:alnum:] | 表示大小写字母以及阿拉伯数字[0-9a-zA-Z] |
| [:space:] | 表示空格或者Tab键 |
| [:alpha:] | 表示大小写字母[a-z A-Z] |
| [:cntrl:] | 表示Ctrl键 |
| [:graph:]或[:print:] | 表示ASCII码33-126之间的字符 |
| [:xdigit:] | 表示16进制数字[0-9A-Fa-f] |
例如,搜索匹配以大写字母开头的行,如图:

其余用法一样,再次不在列举
精确匹配:
首先在a.txt文件中查找匹配the的文本行,可以看到有多个匹配,其中还有的是单词中的一部分,如图:

如果要精确匹配,只显示单独的the,不显示包含在其他单词内部,此时需要使用正则表达式,精确匹配符号\<\> ,如图:

或字符:
或字符”|” 是扩展正则表达式中定义的,grep 需要加-E参数才可以使用,例如,查找a.txt文件中匹配centers或者Centers的行,如图:

上述命令中如果不加-E参数,前方需要使用命令egrep才可以
grep命令族简介:
- grep : 标准grep命令,支持基本正则表达式
- egrep :扩展grep命令,支持基本以及扩展正则表达式(与 grep -E 等价)
- fgrep : 快速grep 命令,不支持正则表达式(与grep -f 等价)
判断一个字符串中是否包含另一个字符串时可以使用grep来搜索进行判断


