Shell 编程-Shell三剑客 Grep 学习
Shell 编程-Shell三剑客 Grep
今天给伙伴们分享一下Shell 编程-Shell三剑客Grep,希望看了有所收获。
我是公众号「想吃西红柿」「云原生运维实战派」作者,对云原生运维感兴趣,也保持时刻学习,后续会分享工作中用到的运维技术,在运维的路上得到支持和共同进步!
如果伙伴们看了文档觉得有用,欢迎大家关注我的公众号,获取相关文档。爱运维,爱生活。
一、Grep 介绍
-
grep命令是Globally search a Regular Expression and Print的缩写,表示进行全局的正则匹配并进行打印。
-
grep 系列是 Linux 中使用频率最高的文本查找命令。主要功能在一个或者多个文件中查找特定模式的字符串。如果该行有匹配的字符串,则输出整个行的内容。如果没有匹配的内容,则不输出任何内容。grep命令不改动源文件。
-
Linux的grep家族包括grep、egrep、fgrep、rgrep。grep 可以通过 -G、-E、-F 命令行选项来使用 egrep 和 fgrep 的功能。
-
grep: 在文件中全局查找指定的正则表达式,并打印所有包含该表达式的行 grep -E == egrep
-
egrep: 扩展的egrep,支持更多的正则表达式元字符
-
fgrep: 固定grep(fixed grep),有时也被称作快速(fast grep),它按字面解释所有的字符,只进行字符的匹配,不支持正则表达式
二、Grep 命令格式
grep [选项] PATTERN filename filename ...
- 在每个 FILE 或是标准输入中查找 PATTERN。默认的 PATTERN 是一个基本正则表达式(缩写为 BRE)。
[root@edenluo.com ~]# grep -i 'hello world' menu.h main.c
三、Grep 命令选项
短参数 | 长参数 | 参数功能 |
---|---|---|
-B | –before-context=NUM | 打印以文本起始的NUM 行 |
-A | –after-context=NUM | 打印以文本结尾的NUM 行 |
-C | –context=NUM | 打印输出文本NUM 行 |
-NUM | 等同 --context=NUM | |
–color[=WHEN] --colour[=WHEN] | 高亮颜色突出显示搜索的字符串。值’always’, ‘never’, or ‘auto’。 | |
-U | –binary | 将文件作为二进制文件处理。仅有MS-DOS和MS-Windows支持该选项 |
-u | –unix-byte-offsets | 报告UNIX风格的字节偏移。这个选项仅在同时使用-b选项的情况下才有效;仅有MS-DOS和MS-Windows支持该选项 |
与 PATTERN 正则表达式相关的选项 | ||
-E | –extended-regexp | PATTERN 是一个可扩展的正则表达式(缩写为 ERE) |
-F | –fixed-strings | PATTERN 是一组由断行符分隔的定长字符串 |
-G | –basic-regexp | PATTERN 是一个基本正则表达式(缩写为 BRE) |
-P | –perl-regexp | PATTERN 是一个 Perl 正则表达式 |
-e | –regexp= PATTERN | 用 PATTERN 来进行匹配操作 |
-f | –file=FILE | 从 FILE 中取得 PATTERN |
-i | –ignore-case | 忽略大小写 |
-w | –line-regexp | 强制 PATTERN 仅完全匹配字词 |
-x | –extended-regexp | 强制 PATTERN 仅完全匹配一行 |
-z | –null-data | 一个 0 字节的数据行,但不是空行 |
输出控制选项 | ||
-m | –max-count=NUM | 在找到指定数量的匹配行后停止读文件 |
-b | –byte-offset | 在显示符合样式的那一行之前,标示出该行第一个字符的编号 |
-n | –line-number | 在显示符合样式的那一行之前,标示出该行的列数编号 |
–line-buffered | 刷新输出的每一行 | |
-H | –with-filename | 在显示符合样式的那一行之前,表示该行所属的文件名称 |
-h | –no-filename | 在显示符合样式的那一行之前,不标示该行所属的文件名称 |
–label=LABEL | 打印标签作为文件名的标准输入(主要用于管道处理) 例如:cat test |grep --label=test -H 123 | |
-o | –only-matching | 仅输出匹配行的匹配部分 |
-q | –quiet --silent | 抑制所有正常输出 |
–binary-files=TYPE | 假定二进制文件为TYPE类型文件TYPE可以为binary、text或without-match | |
-a | –text | 等价于-binary-files=text |
-I | –binary-files=without-match | 等价于–binary-files=without-match |
-d | –directories=ACTION | 当grep的对象为目录时用,处理目录可以读取、递归或跳过 |
-D | –devices=ACTION | 当grep的对象为处理设备、栈或套接字时必须用,处理对象可以读取或跳过 |
-r -R | –recursive --directories=recurse | 相当于–directories=recurse 遍历目录 |
–include=FILE_PATTERN | 仅grep匹配的文件模式的文件 | |
–exclude=FILE_PATTERN | 跳过匹配的文件模式的文件和目录进行grep匹配 | |
–exclude-from=FILE | 跳过任一匹配文件模式的文件 | |
—exclude-dir=PATTERN | 跳过匹配的目录文件目录 | |
-L | –files-without-match | 仅仅打印未匹配的文件的文件名 |
-l | –files-with-matches | 仅仅打印匹配的文件的文件名 |
-c | –count | 仅仅打印每个文件的匹配次数 |
-T | –initial-tab | 将标签排队(标签即文件名) |
-Z | –null | 打印文件名,文件名与匹配行中间没有空字节 -z与-Z的区别之一:当一个文件有多个匹配行时-z只打印一次文件名,而-Z每匹配一次打印一次文件名 |
杂项 | ||
-s | –no-messages | 不显示错误信息 |
-v | –invert-match | 打印不匹配的行 |
- ‘egrep’即‘grep -E’。‘fgrep’即‘grep -F’。直接使用‘egrep’或是‘fgrep’均已不可行了。
- 不带 FILE 参数,或是 FILE 为 -,将读取标准输入。如果少于两个 FILE 参数。
- 就要默认使用 -h 参数。如果选中任意一行,那退出状态为 0,否则为 1;如果有错误产生,且未指定 -q 参数,那退出状态为 2。