grep:
文本过滤工具 正则表达式引擎
基于用户指定的“模式”,对目标文件逐行进行匹配检查,打印匹配到的行,默认打印到终端窗口
模式:正则表达式元字符编写出来的过滤条件
正则表达式:
由一类特殊的字符以及文本字符所编写的模式,并不代表字面含义,表达控制或者通配的功能。
正则表达式引擎:
grep [OPTIONS] PATTERN [FILE…] PATTERN 模式
grep [OPTIONS] [-e PATTERN | -f FILE] [FILE…] 可以把模式写到一个文件中通过-f读取,然后对file进行过滤。
| 选项 | 功能 |
|---|---|
| –color=auto | 高亮显示匹配到的文本 |
| -i | 忽略字符大小写 |
| -n | 显示行号 |
| -E | 支持使用扩展正则表达式 |
| -o | 打印匹配到的行 |
| -v | 显示不能被匹配到的行 |
| -A # | after, 后#行 |
| -B # | before,前#行 |
| -C # | context,前后各#行 |
基本正则表达式元字符:
分为四种,字符匹配,匹配次数,位置锚定,分组及引用。
字符匹配:
| 选项 | 功能 |
|---|---|
| . | 匹配任意单个字符 |
| [] | 匹配指定范围内的任意单个字符 |
| [^] | 匹配指定范围外的任意单个字符; 脱字符 |
| [:digit:] | 数字 |
| [:lower:] | 小写字母 |
| [:upper:]、 | 大写字母 |
| [:alpha:] | 所有字母 |
| [:alnum:] | 数字和字母 |
| [:punct:] | 所有标点符号 |
| [:space:] | 空格 |
次数匹配:用在要指定出现的次数的字符的后面,用来限制其前面字符出现的次数
| 选项 | 功能 |
|---|---|
| * | 匹配其前面的字符任意次。0次,1次或者多次 |
| .* | 匹配任意长度的任意字符 |
| ? | 匹配其掐面的字符0次或者1次,最多一次 |
| + | 匹配其前面的字符1次或者多次,至少一次 |
| {m} | 匹配其前面的字符m次 |
| {m,n} | 匹配其前面的字符至少m次,至多n次 |
| {0,n} | 至多n次 |
| {m,} | 至少m次 |
位置锚定
| 选项 | 功能 |
|---|---|
| ^ | 行首锚定,用于模式的最左侧 |
| $ | 行尾锚定,用于模式的最右侧 |
| ^$ | 空白行 |
| ^pattern$ | 用pattern来匹配整行 |
| <或者\b | 词首锚定,用于单词的左侧 |
| >或者\b | 词尾锚定,用于单词的右侧 |
| <pattern> | 匹配完整单词 |
练习:
1、显示/etc/passwd文件中不以/bin/bash结尾的行;

2、显示/etc/passwd中的两位数或者三位数

3、找出 netstat -tan 命令结果中以LISTEN后跟一个或者多个空白字符结尾的行

分组和引用
分组
():将一个或多个字符捆绑在一起,当作一个整体进行处理;
(xy)*ab 命令行中括号有特殊意义所以用转义符\
引用
分组括号内匹配的模式,会被正则表达式引擎记录在内部变量中,通过变量进行应用
\1:模式从左侧起,第一个左括号与之匹配的右括号之间模式所匹配到的字符
\2: 模式从左侧起,第二个左括号与之匹配的右括号之间模式所匹配到的字符
\3
\4
…
括号可以嵌套不能交叉
举例:
He loves his lover.
He likes his lover.
She likes her liker.
She loves her liker.

或者
| a|b 在|两边a和b是独立的
A|apple 表示:A或者apple 不是 Apple或者apple
(A|a)pple
正则表达式匹配中,工作在贪婪模式:尽可能多的去匹配
976

被折叠的 条评论
为什么被折叠?



