Shell Command: grep
站内链接:
文件相关:
- 文件-基本操作集
- 文件-过滤
- 文件-find
- 文件-grep
- 文件-locate
- 文件-lsof
- 文件-redirect
- 文件-regex
- 文件-rsync
- 文件-sed
- 文件-tar
- 文件-xargs
Introduction
文本三剑客
在讲解 grep 命令之前, 先让我们简单的了解一下何为文本三剑客
: grep, awk, sed.
- grep: 基于正则表达式查找到
满足条件
的行信息, 专注于: 数据查找定位 - awk: 对定位到的数据行进行切片分段处理, 按列来处理数据, 专注于: 数据切片
- sed: 对定位到的数据行进行更改, 专注于: 数据修改
grep
搜索输入的 FILES 中每一行是否 match 匹配项, 如果匹配, 提取出来.
- egrep: 等价于 grep -E
- fgrep: 等价于 grep -F
- rgrep: 等价于 grep -R
另外, 对于持续输出数据continuous stream
, grep 需要添加--line-buffered(行缓存)
才能进行过滤处理.
Format
命令
- grep 通用的命令格式如下:
1 | # 正常格式 |
- 各个 options 用法说明:
1 | grep -i pattern file1 # 忽略大小写 |
其中-nir
常常会一起连用, 表示递归搜索, 忽略大小写, 并打印行号信息
正则
POSIX 正则分为两大流派: BRE(基本表达式), ERE(扩展正则), 其中 grep, vi, sed, 一些数据库都是属于 BRE, 他们是最早的正则表达式, 其元字符必须经过转义才具有特有含义. 当然, egrep, awk 使用的 ERE 功能更加丰富, 而且元字符不需要转义.
- BRE
1 | . 任意单个字符 |
例子:
1 | # 1. 匹配abb |
- ERE: 所有元字符不需要转义, 另外增加了
?, +, |
语法, 另外 BRE 和 ERE 都没有贪婪/非贪婪匹配的说法.
1 | {m} |
- POSIX 字符集: 不支持其他正则表达式中的
\d, \w
等符号, 但是定义了一些常用的字符集
1 | [:alnum:] # 数字字母 |
Example
- 基于管道过滤查找进程或者搭配使用
1 | # 1. 多模式匹配, 在输出ps的同时输出头部信息 |
- 查找目录下所有文件是否包含特定
1 | # 1. 是否包含特定字符 |
- 其他
1 | # 1. 获取nginx访问日志中 404, 500错误日志的前 3 条 |
- 获取匹配的前后 N 行, 在异常日志中非常有用
1 | grep -10 "patttern" filename |
引用
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 狂想写作本!
评论