文章目录
一、grep是什么(形式因)?
-
grep是文本搜索工具,根据用户指定的模式“pattern”对目标文本逐行进行匹配检查,打印出匹配到的行的一种工具;
-
正则表达式 ( Regular Expression, RE, 或称为常规表达式) 是通过一些特殊字符的排行, 用以“搜寻/取代/删除”一行或多行文字字串, 简单的说, 正则表达式就是用在字串的处理上面的一项“表示式”。 正则表达式并不是一个工具程序, 而是一个字串处理的标准依据, 如果您想要以正则表达式的方式处理字串, 就得要使用支持正则表达式的工具程序才行, 这类的工具程序很多, 例如 vi, sed, awk等等。
二 、为什么学习grep(目的因)?
- 对于系统管理员来说系统会产生很多的讯息, 这些讯息有的重要有的仅是告知, 管理员可以通过正则表达式的功能来将重要讯息撷取出来, 并产生便于查阅的报表来简化管理流程,在管理主机时, 能够更精简处理日常事务!
三、grep有什么组成要素(质料因)?
(一)、正则表达式单个字符:
- [:alnum:] 代表英文大小写字符及数字,亦即0-9,A-Z,a-z
- [:alpha:] 代表任何英文大小写字符,亦即A-Z,a-z
- [:blank:] 代表空白键与【tab】按键两者
- [:cntrl:] 代表键盘上面的控制按键,亦即包括CR,LF,Tab,Del…等等
- [:digit:] 代表数字而已,亦即0-9
- [:graph:] 除了空白字符(空白键与【tab】按键)外的其他所有按键
- [:lower:] 代表 小写字符,亦即a-z
- [:print:] 代表任何可以被打印出来的字符
- [:punct:] 代表标点符号(punctuation symbol),亦即:”’?!;#…
- [:upper:] 代表大写字符,亦即A-Z
- [:space:] 任何会产生空白的字符,包括空白键,【Tab】,CR等等
- [:xdigit:] 代表16进位的数字类型,因此包括:0-9,A-F,a-f的数字与字符
(二)、字符匹配:
- .:匹配任意单个字符;
- []:匹配指定范围内的任意单个字符;
- [^]:匹配指定范围外的任意单个字符;
(三)、匹配次数(量词):
用在要指定次数的字符后面,用于指定前面的字符要出现的次数:
- * :匹配前面的字符任意次数;
- .*:任意次数的任意字符;
- \?:匹配其前面的字符0次或者1次,即前面的可有可无;
- \+:匹配前面的字符至少1次;
- \{m\}:匹配前面的字符m次;
- \{m,n\}:匹配前面的字符至少m次,至多n次;
- \{0,n\}:匹配前面的字符至多n次;
- \{m,\} :匹配前面的字符至少m次;
(四)、位置锚定:
- ^:行首锚定;用于模式的最左侧;
- $:行尾锚定;用于模式的最右侧;
- ^PATTERN$:用于模式匹配整行;
- ^$:空行;
- ^[[ :space: ]]*$:
- \<或者\b:词首锚定;用于单词模式的左侧;
- \>或者\b:词尾锚定;用于单词的右侧;
- \<PATTERN\>:匹配整个单词;
(五)、分组:
-
( ):将一个或多个字符捆绑为一组,即当做一个整体进行处理;
注意: 分组括号中的模式匹配到的内容会被正则表达式引擎记录于内部的变量中,这些变量的命名方式为: \1, \2, \3, …;
例:(ab+(xy)*): -
\1: ab+(xy)*
-
\2: xy
-
后向引用:引用前面的分组括号中的模式所匹配字符,(而非模式本身)
三、方法论:如何使用grep?
grep [OPTIONS] PATTERN [FILE…]
OPTIONS(选项):可以省略
–color=auto: 对匹配到的文本着色显示;
-v: 显示不能够被pattern匹配到的行;
-i: 忽略字符大小写;
-o: 仅显示匹配到的字符串;
-q: 静默模式,不输出任何信息;
-A #:after, 后#行
-B #: before, 前#行
-C #:context, 前后各#行
-E:使用ERE;
PATTERN:由元字符组成:不能省略
FILE:文件:可以多个;也可以省略,省略的时候需要和管道结合使用吧?
四、扩展正则表达式egrep和grep的不同:
(一)、次数匹配(量词):
- *:匹配前面的字符任意次数
- ?:匹配其前面的字符0次或者1次,即前面的可有可无;
- +:匹配前面的字符至少1次;
- {m}:匹配前面的字符m次;
- {m,n}:匹配前面的字符至少m次,至多n次;
- {0,n}:匹配前面的字符至多n次;
- {m,}:匹配前面的字符至少m次;
(二)、或者:
- a|b:dog|cat(dog或者cat);
五、grep和egrep 图表
(一)、grep图表
元字符 | 字符匹配 | 量词 | 位置锚定 | 分组 |
---|---|---|---|---|
[:alnum:] 代表英文大小写字符及数字,亦即0-9,A-Z,a-z | .:匹配任意单个字符; | * :匹配前面的字符任意次数; | ^:行首锚定;用于模式的最左侧; | ( ):将一个或多个字符捆绑为一组,即当做一个整体进行处理; |
[:alpha:] 代表任何英文大小写字符,亦即A-Z,a-z | []:匹配指定范围内的任意单个字符; | .*:任意次数的任意字符; | $:行尾锚定;用于模式的最右侧; | |
[:blank:] 代表空白键与【tab】按键两者 | [^]:匹配指定范围外的任意单个字符; | ?:匹配其前面的字符0次或者1次,即前面的可有可无; | ^PATTERN$:用于模式匹配整行; | |
[:cntrl:] 代表键盘上面的控制按键,亦即包括CR,LF,Tab,Del…等等 | +:匹配前面的字符至少1次; | ^$:空行; | ||
[:digit:] 代表数字而已,亦即0-9 | \{m\}:匹配前面的字符m次; | \<或者\b:词首锚定;用于单词模式的左侧; | ||
[:graph:] 除了空白字符(空白键与【tab】按键)外的其他所有按键 | \{m,n\}:匹配前面的字符至少m次,至多n次 | \>或者\b:词尾锚定;用于单词的右侧; | ||
[:lower:] 代表 小写字符,亦即a-z | \{0,n\}:匹配前面的字符至多n次; | \<PATTERN\>:匹配整个单词; | ||
[:upper:] 代表大写字符,亦即A-Z | \{m,\} :匹配前面的字符至少m次; | |||
[:print:] 代表任何可以被打印出来的字符 | ||||
[:punct:] 代表标点符号(punctuation symbol),亦即:”’?!;#… | ||||
[:space:] 任何会产生空白的字符,包括空白键,【Tab】,CR等等 | ||||
[:xdigit:] 代表16进位的数字类型,因此包括:0-9,A-F,a-f的数字与字符 |
(二)、egrep图表
元字符 | 字符匹配 | 量词 | 位置锚定 | 分组 | 或 |
---|---|---|---|---|---|
[:alnum:] 代表英文大小写字符及数字,亦即0-9,A-Z,a-z | .:匹配任意单个字符; | * :匹配前面的字符任意次数; | ^:行首锚定;用于模式的最左侧; | ( ):将一个或多个字符捆绑为一组,即当做一个整体进行处理; | a|b:dog|cat(dog或者cat); |
[:alpha:] 代表任何英文大小写字符,亦即A-Z,a-z | []:匹配指定范围内的任意单个字符; | .*:任意次数的任意字符; | $:行尾锚定;用于模式的最右侧; | ||
[:blank:] 代表空白键与【tab】按键两者 | [^]:匹配指定范围外的任意单个字符; | ?:匹配其前面的字符0次或者1次,即前面的可有可无; | ^PATTERN$:用于模式匹配整行; | ||
[:cntrl:] 代表键盘上面的控制按键,亦即包括CR,LF,Tab,Del…等等 | +:匹配前面的字符至少1次; | ^$:空行; | |||
[:digit:] 代表数字而已,亦即0-9 | {m}:匹配前面的字符m次; | \<或者\b:词首锚定;用于单词模式的左侧; | |||
[:graph:] 除了空白字符(空白键与【tab】按键)外的其他所有按键 | {m,n}:匹配前面的字符至少m次,至多n次 | \>或者\b:词尾锚定;用于单词的右侧; | |||
[:lower:] 代表 小写字符,亦即a-z | {0,n}:匹配前面的字符至多n次; | \<PATTERN\>:匹配整个单词; | |||
[:upper:] 代表大写字符,亦即A-Z | {m,} :匹配前面的字符至少m次; | ||||
[:print:] 代表任何可以被打印出来的字符 | |||||
[:punct:] 代表标点符号(punctuation symbol),亦即:”’?!;#… | |||||
[:space:] 任何会产生空白的字符,包括空白键,【Tab】,CR等等 | |||||
[:xdigit:] 代表16进位的数字类型,因此包括:0-9,A-F,a-f的数字与字符 |