今天我们来学习一下Shell的正则表达式。
正则表达式的概念:
正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、以及这些特定字符的组合,责成一个“规定字符串”,这个“规定字符串”用来表达对字符串的一种过滤逻辑。规定这些特殊语法表示字符类、数量限定符和位置限定符,然后用这些特殊的语法和普通的字符一起表示一个模式,这就是正则表达式。正则表达式是用于描述一组字符串特征的模式,用来匹配特定的字符串。通过特殊字符+普通字符来进行模式描述,从而达到文字匹配目的工具。
正则表达式的分类:
基本的正则表达式(Basic Regular Expression又叫Basic RegEx简称BREs)
扩展的正则表达式(Extended Regular Expression又叫Extended RegEx 简称EREs)
Perl的正则表达式(Perl Regular Expression 又叫Perl RegEx简称PREs)
应用场景:
验证:表单提交时,进行用户的密码验证。
查找:从大量的信息中快速提取指定内容,在一批url中,查找指定的url
替换:将制格式的文本,进行正则匹配查找,找到之后进行特定替换
小小的场景:
我们如果想按照行进行查找,找到指定的行是有效电话号码的行。分析可以知道,要描述“特定行是电话号码”,我们需要知道三个信息:
- 电话号码的符号组成 -数字 - 字符类
- 电话号码的符号个数 -11- 数量限定符
- 当前只有一个电话号码,也就是以电话号码开头,以电话号码结尾。 - 位置限定符
所以根据以上的描述我们可以知道正则表达式的基本要素是:
- 字符类
- 数量限定符
- 位置限定符
- 特殊符号
字符类:
字符 | 含义 | 举例 |
. | 匹配任意一个字符 | abc.可以匹配abcd,abc9等 |
[ ] | 匹配括号中的任意一个字符 | [abc]d可以匹配aad,bd,cd |
- | 在括号内表示字符范围 | [0-9a-fA-F]可以匹配任意一个十六进制数字 |
^ | 位于[]括号内的开头,匹配除括号中的字符外的任意一个字符 | [^xy]匹配除xy之外的任意一个字符,[^xy]1,可以匹配a1,b1,但不能匹配x1,y1 |
[[:xxx:] | grep工具预定义的一些命名字符类 | [[:alpha:]]匹配一个字母 [[:didit:]]匹配一个数字 |
举例: