【注】具体详解参见 man 手册。
1. 简介
grep 命令用来在文件中查找并输出包含匹配指定模式的字符的行。
2. 格式
grep [OPTIONS] PATTERN [FILE...]
grep [OPTIONS] -e PATTERN ... [FILE...]
grep [OPTIONS] -f FILE ... [FILE...]
其中,OPTIONS 为指定的选项参数,PATTERN 为匹配模式(可以为固定字符串、基础正则表达式 BRE 、扩展正则表达式 ERE 以及 Perl 兼容正则表达式 PCRE),FILE 为指定文件输入(FILE 为 - 代表从标准输入读入)。PATTERN 指定为 BRE 或 ERE 可参照 LinuxShell正则表达式 。
3. 常用参数
3.1 基础信息
选项参数 | 说明 |
---|---|
--help | 帮助手册 |
-V, --version | 版本信息 |
3.2 选择匹配模式
选项参数 | 说明 |
---|---|
-E, --extended-regexp | 使用 ERE 解释 PATTERN |
-F, --fixed-strings | 把 PATTERN 仅当做固定字符串来解释 |
-G, --basic-regexp | 使用 BRE 解释 PATTERN(默认) |
-P, --perl-regexp | 使用 PCRE 解释 PATTERN |
- 匹配模式控制
选项参数 | 说明 |
---|---|
-e PATTERN, --regexp=PATTERN | 该选项可被使用多次用于指定多个模式 或者用于保护以 - 为首的模式不被解释为参数 |
-f FILE, --file=FILE | 从文件 FILE 中读取匹配模式(每行一个) |
-i, --ingore-case | 不区分大小写(grep 默认区分) |
-v, --invert-match | 返向搜索(输出不匹配模式行) |
-w, --word-regexp | 只输出包含有完整的词匹配的行(词的组成字符是字母、数字、下划线) 匹配的字符串是必须是行首或者一个不是词组成的字符之后,且必须是行尾或者一个不是词组成的字符之前 |
-x, --line-regexp | 只输出完整行匹配的行(与 -w 同时使用则 -w 无效) |
3.3 普通行输出控制
选项参数 | 说明 |
---|---|
-c, --count | 禁止通常的输出,取而代之输出匹配的行数 |
-L, --files-without-match | 禁止通常的输出,取而代之输出没有任何文本匹配的文件名 (对于输入文件,扫描到第一个匹配的时候就会停止) |
-l, --files-with-matches | 禁止通常的输出,取而代之输出有任一文本匹配的文件名 (对于输入文件,扫描到第一个匹配的时候就会停止) |
-m NUM, --max-count=NUM | 输出 NUM 个匹配的行之后停止继续读取 当同时使用 -c, --count 选项时,输出行数不会比 NUM 更多 当同时指定 -v, --invert-match 选项时,输出 NUM 个不匹配的行之后停止继续读取 |
-o, --only-matching | 只输出匹配的字符串部分(每部分输出占一行) |
-q, --quiet, --silent | 安静模式,不向标准输出写任何信息 如何找到任何匹配字符串就立即以状态 0 退出,即使检测到错误(参见 -s, --no-messages 选项) |
-s, --no-messages | 禁止输出任何有关文件不存在或不可读的错误信息 |
3.4 行输出前缀控制
选项参数 | 说明 |
---|---|
-b, --byte-offset | 在输出的每行前面同时打印出当前行在输入文件中的字节偏移量 当同时指定 -o, --only-matching 选项时,取而代之打印出匹配部分的字节偏移量 |
-H, --with-filename | 在输出的每行前面同时打印出所属文件(当输入多个文件时默认该选项) |
-h, --no-filename | 禁止在输出行前加文件名前缀(当输入单个文件或标准输入时默认该选项) |
--label=LABEL | 讲实际上来自标准输入的输入视为来自文件 LABEL 的输入 |
-n, --line-number | 在输出行前加上其所在文件中的行号 |
-T, --initial-tab | 确保每个输出行在输出航前缀信息后的一个 Tab 后对齐输出 当同时含有 -H, -n, -b 选项时,由于前缀的不等长,该选项则显得非常有用 |
-Z, --null | 在文件名输出后紧跟着输出一个全零字节(ASCII NUL 字符),取代原来的文件名后紧随的字符(换行符、: 等) |
3.5 文本行控制
选项参数 | 说明 |
---|---|
-A NUM, --after-context=NUM | 额外输出紧随匹配行之后最多 NUM 行 当 NUM 小于相邻匹配行间的不匹配行数时,则再附加输出 -- 作为相邻分隔符 当 NUM 大于相邻匹配行间的不匹配行数时,只输出相邻匹配行间的所有行 当同时含有 -o, --only-matching 参数时,该参数除输出 -- 分隔符行外均无效 |
-B NUM, --before-context=NUM | 额外输出紧随匹配行之前最多 NUM 行 当 NUM 小于相邻匹配行间的不匹配行数时,则再附加输出 -- 作为相邻分隔符 当 NUM 大于相邻匹配行间的不匹配行数时,只输出相邻匹配行间的所有行 当同时含有 -o, --only-matching 参数时,该参数除输出 -- 分隔符行外均无效 |
-C NUM, -NUM, --context=NUM | 额外输出紧随匹配行前后各最多 NUM 行 当 NUM 小于相邻匹配行间的不匹配行数时,则再附加输出 -- 作为相邻分隔符 当 NUM 大于相邻匹配行间的不匹配行数时,只输出相邻匹配行间的所有行 当同时含有 -o, --only-matching 参数时,该参数除输出 -- 分隔符行外均无效 |
- 举例
grep -B 1 "!" file
输出结果如下:
hhhhhhhhhhhhhhhhhhhhh
hello world !
--
1
hello earth !
--
2
hello universe !
--
3
hello universe !
hello earth !
hello world !
其中,file 文件内容为:
hhhhhhhhhhhhhhhhhhhhh
hello world !
:)
1
hello earth !
:(
2
hello universe !
:|
3
hello universe !
hello earth !
hello world !
3.6 选择文件(夹)
选项参数 | 说明 |
---|---|
-a, --text | 将二进制文件当做文本文件来处理(等价于下文 --binary-files=text) |
--binary-files=TYPE | 如果一个文件的起始几个字节表明文件包含二进制文件,则假定该文件是 TYPE 类型的(默认 TYPE 为 binary) 如果 TYPE 为 binary,那么不会输出匹配行,而是匹配成功输出提示信息或匹配失败不输出信息 如果 TYPE 为 without-match,那么假定二进制文件不会匹配(等价于 -I 选项) 如果 TYPE 为 text,那么将一个二进制文件视为文本文件处理(等价于 -a 选项) |
-D ACTION, --devices=ACTION | 如果输入文件是一个设备(FIFO 或 socket),使用动作 ACTION 处理(默认为 read) 当 ACTION 指定为 read 时,将设备视为普通文件来读取 当 ACTION 指定为 skip 时,将不处理而直接跳过设备 |
-d ACTION, --directories=ACTION | 如果输入文件是一个目录,使用动作 ACTION 处理(默认为 read) 当 ACTION 指定为 read 时,将设备视为普通文件来读取 当 ACTION 指定为 skip 时,将不处理而直接跳过该目录 当 ACTION 指定为 recurse 时,递归读取目录下的所有文件(等价于 -r 选项) |
--exclude=GLOB | 跳过文件名匹配通配符模式 GLOB 的所有文件 如果是递归读取目录下的文件,则跳过基本名(不包含路径)匹配模式的所有文件 |
--exclude-from=FILE | 通过文件 FILE 指定 GLOB 模式,跳过匹配 FILE 中任一模式的文件 |
--exclude-dir=GLOB | 跳过目录名匹配通配符模式 GLOB 的所有目录 如果是递归读取目录下的目录,则跳过基本名(不包含路径)匹配模式的所有目录 |
-I | 将二进制文件视为不会匹配处理(等价于上文 --binary-files=without-match) |
--include=GLOB | 只处理文件名匹配通配符模式 GLOB 的文件 如果是递归读取目录下的文件,则处理基本名(不包含路径)匹配模式的所有文件 |
-r, --recursive | 递归处理目录下的所有文件,同 -d recurse 选项 对于符号链接,仅在命令行上才按照符号链接所指定的文件/目录递归地读取所有文件。 |
-R, --dereference-recursive | 递归处理目录下所有文件(包括符号链接) |
3.7 其他选项
选项参数 | 说明 |
---|---|
--line-buffered | 输出时使用行缓存(可能造成性能下降) |
-U, --binary | 将文件视为二进制文件处理 |
-z, --null-data | 将输入输出数据视为行串处理,每行以一个全零字节符(ASCII NUL)而不是换行符结束(类似 -Z, --null 选项) |
4. 退出状态
正常情况下,有任一行匹配返回退出状态 0,没有任何行匹配返回退出状态 1,有错误出现返回退出状态 2 。
当指定 -q, --quiet, --silent 选项时,有错误出现也返回退出状态 0 。