grep命令&正则表达式
Linux系统中grep是一种强大的文本搜索工具,按照关键字或正则表达式过滤文本,并把匹配的行打印出来。grep的全称是Global Regular Expression Print,表示的是全局正则表达式版本,使用权限时所有用户。常用选项-E:在扩展正则模式下-P:在Perl正则模式下-V:将不匹配的过滤出来-r/-R:递归查找-q:安静模式,不在屏幕上输出-i:忽略大小写...
Linux系统中grep是一种强大的文本搜索工具,按照关键字或正则表达式过滤文本,并把匹配的行打印出来。grep的全称是Global Regular Expression Print,表示的是全局正则表达式版本,使用权限时所有用户。
常用选项
-E:在扩展正则模式下
-P:在Perl正则模式下
-V:将不匹配的过滤出来
-r/-R:递归查找
-q:安静模式,不在屏幕上输出
-i:忽略大小写
-n:增加行号
-o:只输出文件中匹配到的部分
正则表达式
概念
正则表达式是用于描述一组字符串特征的模式,用来匹配特定的字符串。通过字符串+普通字符来进行模式描述,从而达到文本匹配目的的工具。
三要素
* 字符类
* 数量限定符
* 位置限定符
字符类
字符 | 含义 | 例子 |
---|---|---|
. | 匹配任意一个字符 | .ab匹配aab、bab等 |
[] | 匹配括号中的任意一个字符 | [abc]d匹配ad、bd、cd |
- | 在[]内表示字符范围 | [0-9]、[a-z] |
^ | 位于[]内的开头,匹配除括号中的字符之外的任意一个字符 | [^0-9]匹配除所有的数字任意一个字符 |
[[:xxx:]] | grep工具预定义的一些命名字符类 | [[:alpha:]]匹配一个字母,[[:digit:]]匹配一个数字 |
数量限定符
字符 | 含义 | 例子 |
---|---|---|
? | 紧跟在其前面的单元匹配零次或一次 | a?匹配a、ab、ac |
+ | 紧跟在其前面的单元匹配一次或多次 | ab+匹配abb、abbb、abbbb |
* | 紧跟在其前面的单元匹配零次或多次 | ab*匹配ab、abbb、abbbb |
{N} | 紧跟在其前面的单元精确匹配N次 | abc{3}匹配abccc |
{N,} | 紧跟在其前面的单元匹配至少N次 | abc{3,}匹配abccc、abcccc |
{,M} | 紧跟在其前面的单元匹配最多M次 | abc{,3}匹配abc、abcc、abccc |
{N,M} | 紧跟在其前面二等单元匹配至少N次最多M次 | abc{1,3}匹配abc、abcc、abccc |
位置限定符
字符 | 含义 | 例子 |
---|---|---|
^ | 匹配行首的位置 | ^a匹配行首为a |
$ | 匹配行末的位置 | a$匹配以a结尾的行,^$匹配空行 |
\< | 匹配单词开头的位置 | \< th匹配以th开头的单词 |
> | 匹配单词结尾的位置 | \>is匹配以is结尾的单词 |
\b | 匹配单词开头或结尾的位置 | aaa\b匹配以aaa开头的单词,\baaa匹配以aaa结尾的单词 |
\B | 匹配非单词开头和结尾的位置 | \Bat匹配不以at开头的单词,at\B匹配不以at结尾的单词 |
特殊符号
字符 | 含义 |
---|---|
\ | 转义字符,可以将普通字符转义为特殊字符,也可将特殊字符转换为普通字符 |
() | 将正则表达式的一部分括起来组成一个单元 |
| | 连接两个子表达式,表示或关系,只要任意一个匹配,即可匹配,称作析取符 |
我们发现,加上-E选项,就能匹配除,不加-E什么都没有,这是因为默认的是基本正则表达式,加上-E则是扩展正则表达式。其实,也可以使用egrep,也是扩展正则表达式。
正则表达式的模式
- 基础正则表达式(Basic)
- 扩展正则表达式(extended)
- Perl正则表达式(Perl)
区别:
基础正则和扩展正则的规范基本相同,只是在Basic规范下,有些字符 ?、+、{}、()、| 解释为普通字符,要表示特殊含义需要加 \ 进行转义。
在Extended规范下,这些符号被解释为特殊含义,要取其字面值,也要对其进行 \ 转义。
其他常用通用字符集及其替换
符号 | 替换正则 | 匹配 |
---|---|---|
\d | [0-9] | 数字字符 |
\D | [^0-9] | 非数字字符 |
\w | [a-zA-Z0-9] | 数字、字母、下划线 |
\W | [^\w] | 非数字、字母、下划线 |
\s | [_\r\t\n\f] | 会车、换行、制表符等空白区域 |
\S | [^\s] | 非空白区域 |
\d、\D只有在Perl正则下才能匹配。
贪婪模式与非贪婪模式
我们知道,grep默认的就是贪婪匹配,会将一行中所有满足正则的全部匹配出啦。
而非贪婪模式是一旦发现匹配符合要求,立马匹配成功,而不会继续匹配下去(除非有g,开启下一组匹配)。
零宽断言
用于指定一个位置,这个位置应该满足一定的条件。
1.零宽度正预测
(?+正则表达式)
正则表达式所处位置之前,不包括正则表达式指定的位置的单元。
2.零宽度正后顾后发断言
(?<=正则表达式)
正则表达式所处位置之后,不包括正则表达式指定的位置的单元。
例子
1.过滤文本中的手机号码
2.非零的正整数
3.由数字和26个英文字母组成的字符串
更多推荐
所有评论(0)