Linux中grep支持的正则表达式

表达式选项

-G
--basic-regexp
基本正则表达式,默认选项

-E
--extended-regexp
扩展正则表达式

-F
--fixed-strings
作为字符串处理,不是识别为正则表达式

-P
--perl-regexp
Perl兼容正则表达式

语法

以扩展正则表达式为例。

基本结构

'.':匹配单个任意字符
'?':最多匹配前面的字符一次,0或者1
'*': 匹配前面的字符任意次
'+': 最少匹配前面的字符一次,1或者任意
'{n}': 正好匹配n次
'{n,}': 最少匹配n次
'{,m}': 最多匹配m次
'{n,m}': 最少匹配n次,最多匹配m次

字符类和括号表达式

‘[:alnum:]’
匹配字母和数字: ‘[:alpha:]’ and ‘[:digit:]’; 相当于: ‘[0-9A-Za-z]’.

‘[:alpha:]’
匹配字母包括大写字母和小写字母: ‘[:lower:]’ and ‘[:upper:]’; 相当于:‘[A-Za-z]’.

‘[:blank:]’
空白字符: 空格和制表符.

‘[:cntrl:]’
控制字符. 在ASCII表中,八进制的000~037以及177(DEL)表示的字符。

‘[:digit:]’
数字: 0 1 2 3 4 5 6 7 8 9.

‘[:graph:]’
图形字符: ‘[:alnum:]’ and ‘[:punct:]’.

‘[:lower:]’
小写字母; a b c d e f g h i j k l m n o p q r s t u v w x y z.

‘[:print:]’
可打印字符: ‘[:alnum:]’, ‘[:punct:]’, 空格.

‘[:punct:]’
标点符号: ! " # $ % & ' ( ) * + , - . / : ; < = > ? @ [ \ ] ^ _ ` { | } ~.

‘[:space:]’
空白字符:  制表符,换行符,垂直制表符,换页,回车,空格。

‘[:upper:]’
大小字母:  A B C D E F G H I J K L M N O P Q R S T U V W X Y Z.

‘[:xdigit:]’
十六进制数字: 0 1 2 3 4 5 6 7 8 9 A B C D E F a b c d e f.

反斜杠字符和特殊字符

‘\’ 后面跟一些普通字母时,会有特殊含义,这些特殊字母如下:

‘\b’
匹配单词边缘的空白字符串.

‘\B’
匹配不在单词边缘的空白字符串.

‘\<’
匹配单词开头的空字符串.

‘\>’
匹配单词末尾的空字符串.

‘\w’
匹配单词成分,类似于C语言中的标识符组成规则,由下划线,字母,数字组成,等同于‘[_[:alnum:]]’.

‘\W’
匹配非单词成分,等同于 ‘[^_[:alnum:]]’.

‘\s’
匹配空白字符,等同于 ‘[[:space:]]’.

‘\S’
匹配非空白字符,等同于 ‘[^[:space:]]’.

比如'\brat\b'只会匹配单独的单词'rat','\Brat\B'可以匹配'crate'但是不会匹配'full rat'

锚定

插入符号 '^' 和美元符号 '$' 是元字符,分别匹配行首和行尾的空字符串。它们被称为锚点,因为它们分别强制匹配“锚定”到一行的开头或结尾。

反向引用和子表达式

反向引用 '\ n',其中n是单个数字,匹配之前由正则表达式的第n个括号子表达式匹配的子字符串。例如, '(a)\1' 匹配 'aa'。当与备选符号'|'一起使用时,如果该组不参与匹配,则反向引用会使整个匹配失败。例如, 'a(.)|b\1'不会匹配'ba'。
针对'a(.)|b\1'的理解比较拗口,这里其实是两组表达式,第一组'a(.)'和第二组'b\1',第二组中找不到对应的子表达式,导致第二组会直接失效。

BRE和ERE的区别

在基本正则表达式中,这些字符没有特殊含义: ‘?’, ‘+’, ‘{’, ‘|’, ‘(’, and ‘)’ 
想要有特殊含义需要使用: ‘\?’, ‘\+’, ‘\{’, ‘\|’, ‘\(’, and ‘\)’.
也就是在基本正则表示中'+'会直接匹配'+',想要表示至少匹配一次的含义需要使用'\+'

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值