LinuxShell命令grep
【注】具体详解参见 man 手册。
1. 简介
grep 命令用来在文件中查找并输出包含匹配指定模式的字符的行。
2. 格式
1 |
|
其中,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 参数时,该参数除输出 -- 分隔符行外均无效 |
- 举例
1 |
|
输出结果如下:
1 |
|
其中,file 文件内容为:
1 |
|
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 。
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!